将 interface{} 转换为字符串数组

use*_*195 10 go

我正在尝试将存储在 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)
}
Run Code Online (Sandbox Code Playgroud)

错误:main.go:23:语法错误:语句结束时出现意外的 f

去游乐场

Tim*_*per 17

您尝试执行的是转换。类型转换有特定的规则,所有这些都可以在前面的链接中看到。简而言之,您不能将interface{}值转换为[]string.

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

var data []string = f.GetData().([]string)
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢您的澄清,我有一个问题,为什么人们或否决投票,他们是否希望我在提出问题或什么之前应该知道这一点? (4认同)