Я просто хочу написать такой код:
func (w Writer) WriteVString(strs []string) (int, error) {
return writeV(func(index int, str interface{}) (int, error) {
return w.WriteString(str.(string))
}, strs) // it doesn't work
}
func (w Writer) WriteV(bs [][]byte) (int, error) {
return writeV(func(index int, b interface{}) (int, error) {
return w.Write(b.([]byte))
}, []interface{}{bs...}) // it also can't be compiled
}
type writeFunc func(int, interface{}) (int, error)
func writeV(fn writeFunc, slice []interface{}) (n int, err error) {
var m int
for index, s := range slice {
if m, err = fn(index, s); err != nil {
break
}
n += m
)
return
}
Я думал, что interface{}
может представлять любой тип, поэтому []interface
также может представлять любой []type
раньше, теперь я знаю, что я ошибаюсь, []type
является целым типом, не может считаться []interface{}
.
Итак, может ли кто-нибудь помочь мне, как заставить этот код работать или какое-либо другое решение?
PS. Я знаю, что []byte
или string
можно преобразовать в другое, но на самом деле это не мое намерение, может быть другой тип, а не []byte
и string
.