首页 文章

这种类型声明的含义是什么?

提问于
浏览
-2

我实际上是在学习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 回答

  • 7

    它是一个type declaration,更具体地说是一个类型定义 . 它创建一个新类型,其 []byte 为其基础类型:

    类型定义创建一个新的,不同的类型,其具有与给定类型相同的基础类型和操作,并将标识符绑定到它 .

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

    最后一部分(附加方法)很重要,因为即使不是附加方法,您也可以轻松创建和使用接受“原始”类型作为参数的函数,只有带有方法的类型才能实现列出的接口(“规定”)这些方法,如前所述,除非创建从它们派生的新类型,否则不能将方法附加到某些类型 .

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

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

    创建新类型时,不涉及"inheritance" . 新类型将有0个方法 . 如果你想要"inheritance-like"功能,你应该检查嵌入(与struct types有关),在这种情况下,嵌入类型也将是嵌入式的方法"have" .

相关问题