26723


Go言語で引数として渡されたinterafaceをコピーしてスライスに格納したいです。

つまり下記にようなことがしたいです。

[code]

    func f(x AInterface){
        s := make([]AInterface, 10)
        for i := 0; i< 10; i++{
            s[i] = x
        }
    }
    
[/code]

これだとそれぞれの要素が1つの構造体への参照を持つことになると思います。それぞれ独立した構造体を指すインタフェースを持つスライスを作成するにはどうすればいいのでしょうか。


CC BY-SA 3.0
2016-05-23T13:44:01.593
25112
2016-06-14T01:19:15.143
7232
question
go
Golangでinterface(のパラメータ)をコピーしたい。


あーやっとどうしたいのか見えてきました。  
用途やなぜそうしたいのかを書かれていると  
伝わりやすいと思います。

実用性皆無ですが、これっぽい感じになるかと思います。

[code]

    package main
    
    import "fmt"
    
    type Object struct {
        x   int
        y   int
        arr []int
    }
    
    func main() {
        s := f(&Object{x: 1, y: 3, arr: []int{1, 2, 3}})
    
        for i := 0; i < len(s); i++ {
            fmt.Printf("s[%d] = %p\n", i, s[i])
        }
    }
    
    func f(x interface{}) []interface{} {
        s := make([]interface{}, 10)
        for i := 0; i < 10; i++ {
            d := new(Object)
            *d = *(x.(*Object))
            s[i] = d
        }
        return s
    }
    
[/code]

<https://play.golang.org/p/j1iQVQPyD5>

実用的にするにはファクトリパターンをご利用ください。


CC BY-SA 3.0
2016-06-14T00:05:13.217
26723
2016-06-14T01:19:15.143
2016-06-14T01:19:15.143
5519
11051
25112
answer