2016-08-02 175 views
-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

+4

不,没有其他(安全)的方式来做到这一点。切片是不变的,你必须复制它们来改变每个元素的类型。这与https://golang.org/doc/faq#convert_slice_of_interface的概念相同 – JimB

回答