我实际上是在学习golang(来自.NET),有一点我对这种语言不了解 . 有时我会发现这种声明:
https://github.com/golang/crypto/blob/master/ed25519/ed25519.go
// PublicKey is the type of Ed25519 public keys.
type PublicKey []byte
这究竟是什么意思?它是一个继承自[]字节的结构吗?
它只是一个别名吗?
我以为golang禁止继承 .
我实际上是在学习golang(来自.NET),有一点我对这种语言不了解 . 有时我会发现这种声明:
https://github.com/golang/crypto/blob/master/ed25519/ed25519.go
// PublicKey is the type of Ed25519 public keys.
type PublicKey []byte
这究竟是什么意思?它是一个继承自[]字节的结构吗?
它只是一个别名吗?
我以为golang禁止继承 .
1 回答
它是一个type declaration,更具体地说是一个类型定义 . 它创建一个新类型,其
[]byte
为其基础类型:创建新类型是因为它们可以简化多次使用它们,它们的标识符(它们的名称)可能在其他上下文中表达,并且 - 最重要的是 - 因此您可以为其定义(附加)方法(您不能将方法附加到内置类型,也不是其他包中定义的匿名类型或类型 .
最后一部分(附加方法)很重要,因为即使不是附加方法,您也可以轻松创建和使用接受“原始”类型作为参数的函数,只有带有方法的类型才能实现列出的接口(“规定”)这些方法,如前所述,除非创建从它们派生的新类型,否则不能将方法附加到某些类型 .
例如,类型
[]int
永远不会实现sort.Interface所需的可排序(通过sort
包),因此创建了一个新类型sort.IntSlice(它是type IntSlice []int
),所需的方法附加到该类型,因此您可以传递一个值键入sort.IntSlice
到sort.Sort()函数,但不是[]int
类型的值 . 由于sort.IntSlice
已将[]int
作为其基础类型,如果您的值为[]int
,如果要对其进行排序,则可以简单convert,如此示例(在Go Playground上尝试):创建新类型时,不涉及"inheritance" . 新类型将有0个方法 . 如果你想要"inheritance-like"功能,你应该检查嵌入(与struct types有关),在这种情况下,嵌入类型也将是嵌入式的方法"have" .