cos*_*ner 31 type-conversion go
我只想写一些像这样的代码:
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
}
Run Code Online (Sandbox Code Playgroud)
我以为interface{}可以代表任何类型,所以[]interface也可以代表[]type之前的任何类型,现在我知道我错了,[]type是一个整体类型,不能算是[]interface{}.
那么,任何人都可以帮助我如何使这个代码工作,或任何其他解决方案?
PS:我知道[]byte或者string可以相互转换,但实际上并不是我的意图,可能有另一种类型而不是[]byte和string.
Von*_*onC 37
现在我知道我错了,
[]type是一个整体类型,不能算是[]interface{}.
是的,那是因为interface{}它是自己的类型(而不是任何其他类型的"别名").
正如我在" golang 的含义是interface{}什么? "中提到的那样(如果v是interface{}变量):
初学者被认为是"
v任何类型",但这是错误的.
v不属于任何类型; 它是interface{}类型的.
他们在记忆中没有相同的表现形式.
有必要将元素分别复制到目标切片.
此示例将int切片转换为以下切片interface{}:
t := []int{1, 2, 3, 4}
s := make([]interface{}, len(t))
for i, v := range t {
s[i] = v
}
Run Code Online (Sandbox Code Playgroud)
小智 11
func ToGenericArray(arr ...interface{}) []interface{} {
return arr
}
Run Code Online (Sandbox Code Playgroud)
func yourfunc(arr []interface{}) {
....
}
yourfunc(ToGenericArray([...]string{"a", "b", "c"}))
Run Code Online (Sandbox Code Playgroud)
func yourfunc(arr []interface{}) {
....
}
arr:=[...]string{"a", "b", "c"}
yourfunc(ToGenericArray(arr))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23836 次 |
| 最近记录: |