Saya ingin tahu mengapa Go tidak secara implisit dikonversi []T
ke []interface{}
ketika secara implisit dikonversi T
ke interface{}
. Apakah ada sesuatu yang tidak sepele tentang konversi ini yang saya lewatkan?
Contoh:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
mengeluh
tidak dapat menggunakan (ketik [] string) sebagai tipe [] antarmuka {} dalam argumen fungsi
Dan jika saya mencoba melakukannya secara eksplisit, hal yang sama: b := []interface{}(a)
mengeluh
tidak dapat mengonversi string (ketik []) ke antarmuka [] {}
Jadi setiap kali saya perlu melakukan konversi ini (yang tampaknya banyak muncul), saya telah melakukan sesuatu seperti ini:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
Apakah ada cara yang lebih baik untuk melakukan ini, atau fungsi perpustakaan standar untuk membantu dengan konversi ini? Tampaknya konyol untuk menulis 4 baris kode tambahan setiap kali saya ingin memanggil fungsi yang dapat mengambil daftar misalnya int atau string.