【发布时间】:2016-08-02 15:33:54
【问题描述】:
我是 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)
}
我想解决的方法是遍历切片并将其分配给另一个切片。但我知道肯定有其他方法可以做到这一点。
【问题讨论】:
-
不,没有其他(安全)方法可以做到这一点。切片是不变的,您必须复制它们以更改每个元素的类型。和golang.org/doc/faq#convert_slice_of_interface是同一个概念
标签: go casting type-conversion protocol-buffers grpc