&引用;Golang的效率更高,因为任何类型都可以使用“方法”;。这如何提高生产率?

&引用;Golang的效率更高,因为任何类型都可以使用“方法”;。这如何提高生产率?,go,Go,我在观察他们声称的地方(见32:38) “GO可以使编程非常高效,因为 -任何类型都可以提供方法,这为设计提供了有趣的可能性。” 有人能解释一下这个功能是如何提高生产力的吗?这个特性在其他语言中不存在吗?在java或c#中,您需要声明一个类来从某个接口继承/实现。但在golang中,声明不是必需的,只需为要实现的接口编写方法即可 它更灵活,因此我认为它在某种程度上提高了生产率。实际上,这意味着您可以将方法添加到预定义类型中(实际上,不是这些方法,而是从它们派生的类型) 例如,如果您有一个Foo(

我在观察他们声称的地方(见32:38)

“GO可以使编程非常高效,因为 -任何类型都可以提供方法,这为设计提供了有趣的可能性。”

有人能解释一下这个功能是如何提高生产力的吗?这个特性在其他语言中不存在吗?

在java或c#中,您需要声明一个类来从某个接口继承/实现。但在golang中,声明不是必需的,只需为要实现的接口编写方法即可


它更灵活,因此我认为它在某种程度上提高了生产率。

实际上,这意味着您可以将方法添加到预定义类型中(实际上,不是这些方法,而是从它们派生的类型)

例如,如果您有一个
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() }

用Java来实现这一点需要更多的管道,因为您需要一个新类,使其具有一个字段(即
[]Foo
),假设它实现了一个接口,实现了所述方法(如go),并使方法在
[]Foo
fooSlice
类。

函数类型可以在Go中有方法。看看http.handlerFunc(),它是一种函数类型,实现了一个方法。Java没有这个特性。关于“生产力”:这可能会引起争议。它最终允许编写更多类型的代码并允许有趣的设计。我认为你的答案是描述Go中的“隐式类型层次结构”。这显然是一个很好的功能,并在视频中进行了解释。请参见视频中32:38的幻灯片。这是第二点。我的问题是关于第一点。
func sortAndDoStuff(foos []Foo) {
    sort.Sort(fooSlice(foos))
    doStuff(foos)
}