2016-08-02 29 views
-1

Ich bin neu in Golang.
Wenn ich es versuchen, erhalte ich einen Compiler-Fehler:Golang Typ Umwandlung zwischen Scheibe von Zeigern zu Scheibe eines Typs zu Scheibe einer anderen

cannot use a.B (type []*C) as type []Z in field value 

Code:

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) 
} 

So wie ich der Fortbewegung ist durch Iterieren über die Scheibe und die Zuordnung es auf ein anderes denke. Aber ich weiß, dass es andere Wege geben muss, es zu tun.

Go Spielplatz: https://play.golang.org/p/v0PUTPh6Mt

+4

nein, es gibt keine anderen (sicher) Möglichkeiten, es zu tun. Slices sind invariant und Sie müssen sie kopieren, um den Typ jedes Elements zu ändern. Es ist das gleiche Konzept wie https://golang.org/doc/faq#convert_slice_of_interface – JimB

Antwort