Jestem ciekaw dlaczego Go does't niejawnie przekonwertować []T
do []interface{}
kiedy będzie niejawnie konwertować T
do interface{}
. Czy w tej konwersji brakuje czegoś nietrywialnego?
Przykład:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
narzeka
nie można użyć (typu [] ciągu) jako interfejsu typu [] {} w argumencie funkcji
A jeśli spróbuję to zrobić wyraźnie, to samo: b := []interface{}(a)
narzeka
nie można przekonwertować ciągu (typ []) na interfejs typu [] {}
Więc za każdym razem, gdy muszę wykonać tę konwersję (która wydaje się często pojawiać), robiłem coś takiego:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
Czy jest lepszy sposób, aby to zrobić, lub standardowe funkcje biblioteki, aby pomóc w tych konwersjach? Głupio wydaje się pisać 4 dodatkowe wiersze kodu za każdym razem, gdy chcę wywołać funkcję, która może przyjąć listę np. Ints lub łańcuchów.