我正在看Google IO 2010 - GO Programming video他们声称的地方(见32:38)
" GO可以使编程非常高效,因为 - 任何类型都可以给出方法,这开辟了有趣的设计可能性"
有人可以解释一下这个功能如何提高生产力?此功能是否不存在于其他语言中?
答案 0 :(得分:4)
在java或c#中,您需要声明一个类来从某个接口继承/实现。但是在golang中,声明不是必需的,只需编写你想要实现的接口的方法。
它更灵活,因此我想以某种方式提高生产力。
答案 1 :(得分:3)
在实践中,这意味着您可以将方法添加到预定义类型(好吧,不是它们,而是从它们派生的类型)。
例如,如果您有一个Foo
列表(其中Foo
是您或其他包定义的类型)并且想要使该列表可排序,您只需要使列表实现{ {1}}。为此,您只需定义一个新类型
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
用Java来做这件事需要更多的管道,因为你需要一个新的类,让它有一个字段(func sortAndDoStuff(foos []Foo) {
sort.Sort(fooSlice(foos))
doStuff(foos)
}
),比如它实现一个接口,实现所述方法(与go一样)并制作在[]Foo
和[]Foo
类之间来回传递的方法。