2017-04-12 207 views
0

我是新來的,遇到以下問題,但我無法在教程或谷歌搜索中找到,但我確定它必須是我錯過的語言的基本方面。我有一個像下面的代碼:在golang中聲明一個具有任意返回類型的函數類型

type Task func() 

var f Task = func() { fmt.Println("foo") } 

type TaskWithValue func() interface{} 

var g TaskWithValue = func() { return "foo" } 

var h TaskWithValue = func() { return 123 } 

在上面f,沒有編譯器錯誤,但對於gh有像下面的錯誤:

Cannot use func() { return "foo" } (type func()) as type TaskWithValue in assignment 

從本質上講,我想定義一個可以有任意返回類型的Task類型。在其他語言中,我只會給Task一個類型參數,如Task<Integer>Task<String>,但由於go沒有泛型/模板,因此我明白解決方法是使用返回類型interface{},然後轉換結果。我錯過了什麼讓這個例子工作?

回答

1

你錯過了返回類型的匿名函數表達式:

var g TaskWithValue = func() interface{} { return "foo" } 

var h TaskWithValue = func() interface{} { return 123 }