我一直在读A Tour of Go来学习Go-Lang,到目前为止进展顺利.

我目前正在上Struct Fields课,下面是右边的示例代码:

package main

import "fmt"

type Vertex struct {
  X int
  Y int
}

func main() {
  v := Vertex{1, 2}
  v.X = 4
  fmt.Println(v.X)
}

看一下第3行:

type Vertex struct {

我不明白的是,type这个关键字是做什么用的,为什么会在那里?

推荐答案

关键字type是用来创建新类型的.这叫做type definition.新类型(在您的示例中为Vertex)将具有与基础类型(具有X和Y的 struct )相同的 struct .这行基本上是说"基于Xint和Yint的 struct 创建一个名为Vertex的类型".

不要混淆类型定义和类型别名.当你声明一个新类型时,你不仅仅是给它起了一个新名字——它将被视为一个独特的类型.关于这个主题的更多信息,请看type identity.

Go相关问答推荐

切换选项卡时,Goland IDE中的光标自动转移

如何使用Gorilla WebSockets实现Http.Hijacker&;alexedwards/scs/v2

如何在围棋中从多部分.Part中获取多部分.文件而不保存到磁盘?

如何使用gopher-lua定义一个Lua函数,该函数有一个预定义的表作为param,Lua脚本可以在其中访问该函数中的表?

在整个SQL事务中将使用上下文作为默认设置吗?

如何解析Go-Gin多部分请求中的 struct 切片

死锁 - 所有 goroutine 都处于睡眠状态(即使使用等待组)

使用goroutines在Golang中验证 struct

如何从Go项目连接Microsoft Access数据库?

如何忽略打印达到最大深度限制 go colly

Golang 网络应用程序安全性:您是否应该判断输入是否为有效的 utf-8?

errors.Wrap 和 errors.WithMessage 有什么区别

拆分文本并按空格获取字符串数组,如果文本长度超过 500,则获取字符串数组

如何使用带有方法的字符串枚举作为通用参数?

在 Golang 中,如何将接口作为泛型类型与 nil 进行比较?

Golang模板无法访问embedFS中的文件

为什么 0 big.Int 的 .Bytes() 值是空切片?

当 git clone 工作时,Go mod tidy 在私有存储库上失败

出于某种原因,Golang (Go) AES CBC 密文被填充了 16 个 0x00 字节

Scanner.Buffer - 最大值对自定义拆分没有影响?