2017-03-11 70 views
-1

我试图让存储在接口[]返回字符串数组中的数据。遇到意外错误。铸造界面{}到字符串数组

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

回答

1

的到底是什么你想表演的是conversion。类型转换有特定的规则,所有这些都可以在前面的链接中看到。总之,您不能将interface{}值转换为[]string

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

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

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

+0

感谢澄清,我有一个问题,为什么人们会投票,他们希望我在提出问题或什么之前知道这一点? – user2727195