【问题标题】:casting interface{} to string array将 interface{} 转换为字符串数组
【发布时间】:2017-03-12 04:59:34
【问题描述】:

我正在尝试将存储在 interface[] 中的数据返回到字符串数组。遇到意外错误。

type Foo struct {
    Data interface{}
}

func (foo Foo) GetData() interface{} {
    return foo.Data
}

func (foo *Foo) SetData(data interface{}) {
    foo.Data = data
}

func main() {
    f := &Foo{}
    f.SetData( []string{"a", "b", "c"} )

    var data []string = ([]string) f.GetData()
    fmt.Println(data)
}

错误:main.go:23:语法错误:语句末尾出现意外 f

Go Playground

【问题讨论】:

    标签: go


    【解决方案1】:

    您尝试执行的是conversion。类型转换有具体的规则,都可以在上一个链接中看到。简而言之,您不能将 interface{} 值转换为 []string

    您必须做的是type assertion,这是一种允许您(尝试)将接口类型“转换”为另一种类型的机制:

    var data []string = f.GetData().([]string)
    

    https://play.golang.org/p/FRhJGPgD2z

    【讨论】:

    • 感谢您的澄清,我有一个问题,为什么人们或投反对票,他们是否希望我在提出问题或什么之前知道这一点?
    猜你喜欢
    • 1970-01-01
    • 2017-09-25
    • 2018-12-20
    • 2017-11-27
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多