Кто в теме, объясните, пожалуйста, почему в golang нельзя []что-то привести к []interface{} :
Привести можно, но это необходимо сделать самостоятельно.
interface{}
это отдельный тип и
slice []interface{}
может принять только срез этого типа.
func remove(slice []interface{}, s interface{}) []interface{} {
return append(slice[:s.(int)], slice[s.(int)+1:]...)
}
func main() {
a := []string{"a", "b", "c"}
// преобразование
ai := make([]interface{}, len(a))
for i, v := range a {
ai[i] = v
}
ai = remove(ai, 2)
b := []int{1, 2, 3}
// преобразование
bi := make([]interface{}, len(b))
for i, v := range b {
bi[i] = v
}
bi = remove(bi, 1)
fmt.Printf("%T: %v\n", ai, ai)
fmt.Printf("%T: %v\n", bi, bi)
}
https://play.golang.org/p/gRHqO31LIJU
В смысле, почему не сделать, чтобы так было можно.
Потому что
s []string
это массив массивов типа
byte, а
i []int
массив чисел типа int и они
имеют в памяти разное представление.
Такая же история:
func main() {
b := []i1{i1("xyz")}
bi := make([]intf, len(b))
for i, v := range b {
bi[i] = v
}
print1(bi)
}
https://play.golang.org/p/z9BoM5lutV0