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

标签 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)
}

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

Go Playground

最佳答案

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

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

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

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

关于go - 将 interface{} 转换为字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42740437/

相关文章:

go - 锁定golang递归映射

go - 如何在 golang 中使用 mux 和 gorm 发布 body raw?

sql - 过滤和排序 SQL 查询以重新创建嵌套结构

go - 在 Go 中的多个位置收听一个 channel

json - 希望使用 Golang 将 json 文件转换为 csv 文件

docker - 导入路径不是以主机名开头

sql - 用于 postgres json 插入的原始参数化字符串

go - 如何将 slice 转换为别名 slice ?

go - golang 中延迟电子邮件发送到队列的最佳和最简单的方法

event-handling - 如何使用 gtk.go.Connect() 设置接受参数的插槽(事件处理程序)?