Go语言中文教程 / 结构体

一、结构体

一个结构体(struct)就是一组字段(field)

package main
import "fmt"
type Vertex struct {
 X int
 Y int
}
func main() {
 fmt.Println(Vertex{1, 2})
}

二、结构体字段

结构体字段使用点号来访问。

package main
import "fmt"
type Vertex struct {
 X int
 Y int
}
func main() {
 v := Vertex{1, 2}
 v.X = 4
 fmt.Println(v.X)
}

三、结构体指针

结构体字段可以通过结构体指针来访问。

如果我们有一个指向结构体的指针 p,那么可以通过 (*p).X 来访问其字段 X。不过这么写太啰嗦了,所以语言也允许我们使用隐式间接引用,直接写 p.X 就可以。

package main
import "fmt"
type Vertex struct {
 X int
 Y int
}
func main() {
 v := Vertex{1, 2}
 p := &v
 p.X = 1e9
 fmt.Println(v)
}

四、结构体文法

结构体文法通过直接列出字段的值来新分配一个结构体。

使用 Name: 语法可以仅列出部分字段。(字段名的顺序无关。)

特殊的前缀 & 返回一个指向结构体的指针。

package main
import "fmt"
type Vertex struct {
 X, Y int
}
var (
 v1 = Vertex{1, 2} // 创建一个 Vertex 类型的结构体
 v2 = Vertex{X: 1} // Y:0 被隐式地赋予
 v3 = Vertex{}   // X:0 Y:0
 p = &Vertex{1, 2} // 创建一个 *Vertex 类型的结构体(指针)
)
func main() {
 fmt.Println(v1, p, v2, v3)
}