为了账号安全,请及时绑定邮箱和手机立即绑定

将 []string 转换为 []interface{}

将 []string 转换为 []interface{}

Go
紫衣仙女 2021-09-10 16:21:35
我只想写一些这样的代码: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可以相互转换,但这实际上不是我的意图,可能还有另一种类型而不是[]byteand string。
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

创建一个效用函数,像这样

func ToGenericArray(arr ...interface{}) []interface{} {

    return arr

}

并使用它:

func yourfunc(arr []interface{})  {

....

}


yourfunc(ToGenericArray([...]string{"a", "b", "c"}))


重要提示:以下操作无效

func yourfunc(arr []interface{})  {

....

}


arr:=[...]string{"a", "b", "c"}


yourfunc(ToGenericArray(arr))


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 346 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信