-1
我是Golang的新手。
当我尝试它,我得到一个编译错误:golang类型转换到另一个片段的指针切片
cannot use a.B (type []*C) as type []Z in field value
代码:
package main
type A struct {
B []*C
}
type C struct {
char string
}
type X struct {
Y []Z
}
type Z struct {
char string
}
func doSomething(r interface{}) X {
a := r.(*A)
return X{
Y: a.B, // cannot use a.B (type []*C) as type []Z in field value
}
}
func main() {
something := &C{"abc"}
somewhere := A{}
somewhere.B = []*C{something}
doSomething(somewhere)
}
我想到的是让周围的方法是通过遍历切片并将其分配给另一个。但我知道必须有其他方法来做到这一点。
转到操场:https://play.golang.org/p/v0PUTPh6Mt
不,没有其他(安全)的方式来做到这一点。切片是不变的,你必须复制它们来改变每个元素的类型。这与https://golang.org/doc/faq#convert_slice_of_interface的概念相同 – JimB