我在看他们声称的
Google IO 2010 – GO Programming video(见32:38)
“GO可以使编程非常高效,因为
– 任何类型都可以给出方法,这开辟了有趣的设计可能性“
有人可以解释这个功能如何提高生产力?此功能是否不存在于其他语言中?
解决方法
实际上,这意味着您可以将方法添加到预定义类型(嗯,不是它们,而是从它们派生的类型).
例如,如果你有一个Foo列表(其中Foo是你或其他包定义的类型)并且想要使该列表可排序,你只需要使列表实现sort.Interface.为此,您只需定义一个新类型
type fooSlice []Foo
并在其上定义方法来实现接口:
func (fs fooSlice) Len() int { return len(fs) } func (fs fooSlice) Swap(a,b int) { fs[a],fs[b] = fs[b],fs[a] } func (fs fooSlice) Less(a,b int) bool { return fs[a].Ord() < fs[b].Ord() }
然后,在你有一片Foo的地方,你可以将它作为fooSlice投射并与sort.Sort一起使用:
func sortAndDoStuff(foos []Foo) { sort.Sort(fooSlice(foos)) doStuff(foos) }
用Java来做这件事需要更多的管道,因为你需要一个新的类,让它有一个字段([] Foo),比如它实现一个接口,实现所说的方法(和go一样)和制作在[] Foo和fooSlice类之间来回切换的方法.