Ich bin neugierig , warum implizit Go does't konvertieren []T
zu , []interface{}
wenn es implizit konvertieren T
zu interface{}
. Gibt es etwas nicht Triviales an dieser Konvertierung, das mir fehlt?
Beispiel:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
beschwert sich
kann keine (Typ [] Zeichenfolge) als Typ [] Schnittstelle {} im Funktionsargument verwenden
Und wenn ich es explizit versuche, dasselbe: sich b := []interface{}(a)
beschweren
Ein (Typ [] String) kann nicht in Typ [] Schnittstelle {} konvertiert werden
Jedes Mal, wenn ich diese Konvertierung durchführen muss (was sehr häufig vorkommt), habe ich so etwas gemacht:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
Gibt es eine bessere Möglichkeit, dies zu tun, oder Standardbibliotheksfunktionen, um bei diesen Konvertierungen zu helfen? Es scheint irgendwie albern, jedes Mal, wenn ich eine Funktion aufrufen möchte, die eine Liste von z. B. Ints oder Strings aufnehmen kann, 4 zusätzliche Codezeilen zu schreiben.