2014-05-23 58 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

尽管使用带有映射的指针接收器的情况并不常见:该类型已经包含一个指向底层数据结构的指针,所以直接传递它通常是你想要的。 –

相关问题