Go语言结构体入门

Go 语言也有 结构体( struct )——由若干 字段field )组成的集合。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package main

import "fmt"

type Vertex struct {
    X int
    Y int
}

func main() {
    fmt.Println(Vertex{1, 2})
}

这个例子定义了一个名为 Vertex 的结构体,用于表示一个顶点。 结构体包含两个字段 XY ,类型都是 int ,分别表示顶点的横坐标和纵坐标。

字段

结构体字段可以通过点号 . 操作符访问。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package main

import "fmt"

type Vertex struct {
    X int
    Y int
}

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

    v.X = 4
    fmt.Println(v.X)
}

结构体指针

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

假设我们有一个结构体指针 p ,访问字段 X 理论上可以这么写 (*p).X 。 然而,这看上去很累赘不是? 作为很人性化的语言,Go 允许直接写成 p.X 。 这两种写法没有什么实质性的区别,但是后者显然更为清晰。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
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)
}

字面量

结构体 字面量literal ),即通过列举字段值来表示一个新分配的结构体。

可以通过 字段名: 语法指定部分字段值,其他字段则默认为零值。由于指定了字段名,字段列举顺序也就无关紧要了。

在结构体之前加上 & 操作符,则返回对应的结构体指针。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
package main

import "fmt"

type Vertex struct {
    X, Y int
}

var (
    v1 = Vertex{1, 2}   // has type Vertex
    v2 = Vertex{X: 1}   // Y:0 is implicit
    v3 = Vertex{}       // X:0 and Y:0
    p  = &Vertex{1, 2}  // has type *Vertex
)

func main() {
    fmt.Println(v1, p, v2, v3)
}

【小菜学Go语言】系列文章首发于公众号【小菜学编程】,敬请关注:

【小菜学Go语言】系列文章首发于公众号【小菜学编程】,敬请关注: