一尘不染

此类型声明的含义是什么?

go

我实际上是从(.NET)学习golang的,对此语言我一无所知。有时我会发现这种声明:

https://github.com/golang/crypto/blob/master/ed25519/ed25519.go

// PublicKey is the type of Ed25519 public keys.
type PublicKey []byte

到底是什么意思?它是从[] byte继承的结构吗?

只是别名吗?

我以为golang禁止继承。


阅读 196

收藏
2020-07-02

共1个答案

一尘不染

这是一个类型声明,更具体地说是一个 类型定义
。它创建一个新类型,[]byte其基础类型为:

类型定义使用与给定类型相同的基础类型和操作创建一个新的独特类型,并将标识符绑定到该类型。

创建新类型是因为它们可以多次简化使用,它们的标识符(其名称)可能在其他情况下具有表达性,并且最重要的是,您可以在其上定义(附加)方法(不能将方法附加到内置类型,也不能匿名类型或其他包中定义的类型)。

最后一部分(附加方法)很重要,因为尽管您可以像附加方法那样轻松地创建和使用接受“原始”类型作为参数的函数,但是只有带有方法的类型才能实现列出(“
prescribe”)的接口这些方法,并且如前所述,除非创建从它们派生的新类型,否则无法将方法附加到某些类型。

例如,该类型[]int永远不会实现sort.Interface所需的(可通过sort包进行排序),因此将sort.IntSlice创建一个新类型(即type IntSlice []int),该类型附加了所需的方法,因此您可以将type的值传递sort.IntSlicesort.Sort()函数,但是不是type的值[]int。由于sort.IntSlice具有[]int作为其基础类型,因此,如果您具有的值[]int,则可以简单地转换sort.IntSlice想要对其进行排序的形式,例如在此示例中(在Go
Playground
上尝试):

is := []int{1,3,2}
sort.Sort(sort.IntSlice(is))
fmt.Println(is) // Prints: [1 2 3]

创建新类型时,不涉及“继承”。新类型将具有0个方法。如果您想要“类似继承”的功能,则应签出嵌入(与struct类型有关),在这种情况下,嵌入器类型也将“具有”嵌入类型的方法。

2020-07-02