2014-05-23 80 views
0

我已經試過我可以定義一個函數映射[字符串]接口{}

func (m map[string]interface{}) Foo() { 
    ... 
    } 

func (m *map[string]interface{}) Foo() { 
    ... 
    } 

上,而是去測試錯誤與

invalid receiver type map[string]interface {} (map[string]interface {} is an unnamed type) 

,所以我有添加一些文字以保持SO在這裏的快樂

回答

5

You n eed來定義一個新類型以便能夠爲其添加方法。

package main 

import "fmt" 

type MyMap map[string]interface{} 

func (m MyMap) Foo() { 
     fmt.Println("You fool!") 
} 

func main(){ 
    m := new(MyMap) 
    m.Foo() 
} 
+0

我注意到一個答案說m我的地圖和另一個說b *吧。這兩件事是否等價 - 即*沒有區別。如果它沒有區別爲什麼它被允許 - 因爲對於C讀者來說,它們看起來像是不同的東西 – pm100

+0

通常是指針允許方法修改結構。你可以在這裏閱讀更多關於它的信息:http://golang.org/doc/effective_go.html#pointers_vs_values – fabrizioM

+5

儘管使用帶有映射的指針接收器的情況並不常見:該類型已經包含一個指向底層數據結構的指針,所以直接傳遞它通常是你想要的。 –

相關問題