Go语言的类型系统
Go 语言是一种静态类型的编程语言。这意味着,编译器需要在编译时知晓程序里每个值的类型。
值的类型给编译器提供两部分信息:
- 第一部分,需要分配多少内存给这个值(即值的规模);
- 第二部分,这段内存表示什么。
# 用户定义的类型
Go 语言里声明用户定义的类型有两种方法。
- 最常用的方法是使用关键字 struct,它可以让用户创建一个结构类型。
type user struct {
name string
email string
}
1
2
3
4
2
3
4
结构类型通过组合一系列固定且唯一的字段来声明。
- 基于一个已有的类型,将其作为新类型的类型说明。
type Duration int64
1
新类型和原基础类型是有区别的,无法相互赋值。
# 方法
方法能给用户定义的类型添加新的行为。
在关键字func
和方法名之间增加一个参数,该参数称为接收者,将函数与接收者的类型绑在一起。如果一个函数有接收者,这个函数就被称为方法。
func (u user) notify() {
fmt.Printf("Sending User Email To %s<%s>\n", u.name, u.email)
}
// user类型的值可以用来调用
// 使用值接收者声明的方法
bill := user{"Bill", "bill@email.com"}
bill.notify()
func (u *user) changeEmail(email string) {
u.email = email
}
// 指向 user 类型值的指针也可以用来调用
// 使用值接收者声明的方法
lisa := &user{"Lisa", "lisa@email.com"}
lisa.notify()
func (u *user) changeEmail(email string) {
u.email = email
}
// user 类型的值可以用来调用
// 使用指针接收者声明的方法
bill.changeEmail("bill@newdomain.com")
bill.notify()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Go 语言里有两种类型的接收者:值接收者和指针接收者。
值接收者使用值的副本来调用方法,指针接收者使用实际值来调用方法。
# 类型的本质
如果是要创建一个新值,该类型的方法就使用值接收者。
如果是要修改当前值,就使用指针接收者。
# 内置类型
- 数值类型
- 字符串类型
- 布尔类型
本质上是一种原始的数据值,所以在传递过程中,要进行值传递。
# 引用类型
# 接口
多态是指代码可以
# 嵌入类型
# 公开或未公开的标识符
编辑 (opens new window)
上次更新: 2022/06/10, 08:41:22