2014-01-21 76 views
0

我已經定義了一個自定義類型:如何在Go中自定義地圖類型?

type Thingy map[string]interface{} 

和我傳遞一個空的接口參數的函數:

func f(arg interface{}) 

我希望做的是能夠強制轉換成精氨酸Thingy類型的變量。我一定是誤解有關圍棋一些基本的東西,因爲我不能得到這個工作:

t, ok := arg.(Thingy) 

ok總是返回false那裏。有任何想法嗎?完整的例子在這裏:http://play.golang.org/p/TRZsX4v8-S

+2

http://play.golang.org/p/U16u6-msqA或http://play.golang.org/p/UHyFyNP7Ll – nos

+0

@nos這很有幫助 - 我更接近答案我認爲 – Yobert

回答

3
  1. 這不是一個強制轉換,而是一個類型斷言。
  2. 你不能傳遞一個Thingy,但map[string]interface{}

明白,僅僅因爲類型看起來很相似,這並不意味着你可以互換使用它們是很重要的。當有方法組時,這是最重要的。即使基礎類型相同,對兩種不同類型的x()的調用也必須是可區分的。

+0

同意地圖[string] interface {}!= Thingy。 Thingy是一種新定義的類型。 – Matthias

+0

這是有道理的。我想我的問題是,如何將map [string] interface {}轉換爲Thingy。 – Yobert

+1

阿哈我想通了。我需要首先執行一個類型斷言來映射[string] interface {},然後如果通過,我可以根據上面的@ nos的註釋使用Thingy(arg)進行轉換。非常感謝您的幫助。 – Yobert

相關問題