2017-03-11 101 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