2017-03-11 4 views
-1

Ich versuche, die Daten, die in der Schnittstelle [] gespeichert sind, zurück zu String-Array. Auf einen unerwarteten Fehler stoßen.Casting-Schnittstelle {} zu String-Array

type Foo struct { 
    Data interface{} 
} 

func (foo Foo) GetData() interface{} { 
    return foo.Data 
} 

func (foo *Foo) SetData(data interface{}) { 
    foo.Data = data 
} 

func main() { 
    f := &Foo{} 
    f.SetData([]string{"a", "b", "c"}) 

    var data []string = ([]string) f.GetData() 
    fmt.Println(data) 
} 

Fehler: main.go: 23: Syntaxfehler: unerwartete f am Ende der Aussage

Go Playground

Antwort

1

Was Sie versuchen, ist auszuführen ein conversion. Es gibt spezielle Regeln für Typkonvertierungen, die alle im vorherigen Link zu sehen sind. Kurz gesagt, Sie können einen interface{} Wert nicht in einen []string konvertieren.

Was müssen Sie stattdessen tun, ist ein type assertion, was ein Mechanismus ist, den Sie (Versuch) „convert“ ein Interface-Typ in einen anderen Typ erlaubt:

var data []string = f.GetData().([]string) 

https://play.golang.org/p/FRhJGPgD2z

+0

Dank für die Klärung, Ich habe eine Frage, warum Leute oder unten abstimmen, erwarten sie, dass ich das wissen sollte, bevor ich eine Frage stelle oder was? – user2727195

Verwandte Themen