Go 结构体

结构体的定义

结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。
下面我们来定义一个人类的结构体:

1
2
3
4
type Person struct {
name string // 姓名
age int // 年龄
}

使用

初始化

1
2
3
4
5
var p Person

var p Person{"wang", 20}

p := Person{"wang", 20}

访问成员采用 . 的方式,具体如下:

1
fmt.Printf("name=%s, age=%d", p.name, p.age)

结构体比较

如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的,那样的话两个结构体将可以使用==或!=运算符进行比较。相等比较运算符==将比较两个结构体的每个成员,因此下面两个比较的表达式是等价的

1
2
3
4
p1 := Person{"wang", 20}
p2 := Person{"wang", 30}
fmt.Println(p1.name == p2.name && p1.age == p2.age) // false
fmt.Println(p1 == p2) // false

结构体嵌入和匿名成员

下面我们再定义一个学生的结构体,结构体中嵌入 Person。

1
2
3
4
5
6
7
8
9
10
11
# 定义
type Student struct {
Person
school string // 学校
}

# 初始化
s := Student{Person: Person{"li", 30}, "beida"}

# 访问成员
fmt.Sprintf("name=%s, age=%d, school=%s\n", s.name, s.age, s.school)

代码汇总

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import "fmt"

type Person struct {
name string
age int
gender byte
}

type Student struct {
Person
school string
}

func main() {
p1 := Person{"wang", 20, 'm'}
p2 := Person{"wang", 20, 'm'}

fmt.Printf("name=%s,age=%d\n", p1.name, p1.age)

fmt.Println(p1 == p2)
fmt.Println(p1.name == p2.name && p1.age == p2.age)

s := Student{Person: Person{"li", 30, 'm'}, school: "beida"}
fmt.Printf("name=%s, age=%d, school=%s\n", s.name, s.age, s. school)
}

©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息

Happy Coding

坚持原创技术分享,您的支持将鼓励我继续创作!
Flyertutor WeChat Pay

WeChat Pay

Flyertutor Alipay

Alipay