Ich möchte nur einige Code wie folgt schreiben:Convert [] String [] Schnittstelle {}
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
}
ich interface{}
dachte jede Art darstellen kann, so kann []interface
auch jede []type
vor darstellen, jetzt weiß ich, Ich bin falsch, []type
ist ein ganzer Typ, kann nicht als []interface{}
betrachtet werden.
Also, kann mir jemand helfen, wie dieser Code funktioniert, oder eine andere Lösung ?.
PS: Ich weiß, dass []byte
oder string
können in andere umwandeln werden, aber es ist eigentlich nicht meine Absicht, kann es eher eine andere Art als []byte
und string
.
mögliches Duplikat [Converting Scheibe structs leerer Schnittstelle zu schneiden] (http://stackoverflow.com/questions/9121515/ converting-slice-of-structs-to-slice-of-empty-interface) – Volker