type关键字的确切含义是什么?

Log*_*nch 6 struct types keyword go

我一直在阅读A Tour to Go学习Go,到目前为止它一切顺利.

目前我在结构字段课上,这是右侧的示例代码:

package main

import "fmt"

type Vertex struct {
  X int
  Y int
}

func main() {
  v := Vertex{1, 2}
  v.X = 4
  fmt.Println(v.X)
}
Run Code Online (Sandbox Code Playgroud)

看看第3行:

type Vertex struct {
Run Code Online (Sandbox Code Playgroud)

我不明白的是,type关键字做了什么/它为什么存在?

Eri*_*ang 10

它用于定义新类型。

一般格式:
type <new_type> <existing_type or type_definition>

常见用例:

  • 为现有类型创建新类型。
    格式:
    type <new_type> <existing_type>
    例如
    type Seq []int
  • 在定义结构时创建一个类型。
    格式:
    type <new_type> struct { /*...*/}
    例如
    https://gobyexample.com/structs
  • 定义函数类型,(也就是通过为函数签名分配名称)
    格式:
    type <FuncName> func(<param_type_list>) <return_type>
    例如
    type AdderFunc func(int, int) int

在你的情况下:

它定义了一个以Vertex新结构命名的类型,以便稍后您可以通过Vertex.


hsc*_*asn 8

type关键字是有创建一个新的类型.这称为类型定义.新类型(在您的情况下,Vertex)将具有与基础类型(具有X和Y的结构)相同的结构.该行基本上是说"基于X int和Y int的结构创建一个名为Vertex的类型".

不要将类型定义与类型别名混淆.当您声明一个新类型时,您不只是给它一个新名称 - 它将被视为一种不同的类型.有关该主题的更多信息,请查看类型标识.

  • 此外,如果您有一个带有方法 B 的类型 A。如果你将另一个类型 `C` 定义为 `type CA`,你将无法在类型 `C` 上调用方法 `B`。那就是`var c C; cB()` 不会编译。见 https://play.golang.org/p/bocCzDqu3lh (2认同)