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 的结构体,用于表示一个顶点。 结构体包含两个字段 X 和 Y ,类型都是 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语言】系列文章首发于公众号【小菜学编程】,敬请关注: