结构体
Go 语言也有结构体——由若干 字段 ( field
)组成的集合。
- package main
- import "fmt"
- type Vertex struct {
- X int
- Y int
- }
- func main() {
- fmt.Println(Vertex{1, 2})
- }
例子定义了一个名为 Vertex
的结构体,用于表示一个顶点。结构体包含两个字段,分别是 X
和 Y
,类型都是 int
。
字段
结构体字段可以通过点号 .
操作符访问。
- 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
。这两种写法没有什么实质性的区别,但是后者显然更为清晰。
- 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
),即通过列举字段值来表示一个新分配的结构体。
可以通过 字段名:
语法指定部分字段值,其他字段则默认为 零值 。由于指定了字段名,字段列举顺序也就无关紧要了。
在结构体之前加上 &
操作符,则返回对应的结构体指针。
- 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)
- }
下一步
订阅更新,获取更多学习资料,请关注我们的 微信公众号 :