Go-内置类型和内置函数
1. 内置类型
值类型
1 |
|
引用类型:(指针类型)
1 |
|
2. 内置函数
Go 语言拥有一些不需要进行导入操作就可以使用的内置函数。它们有时可以针对不同的类型进行操作,例如:len、cap 和 append,或必须用于系统级的操作,例如:panic。因此,它们需要直接获得编译器的支持。
名称 | 说明 |
---|---|
append | 用来追加元素到array、slice中,返回修改后的array、slice |
close | 用于管道通信,主要用来关闭channel,用于发送方关闭chan,仅适用于双向或发送通道。 |
delete | 从map中删除key对应的value |
new、make | new 和 make 均是用于分配内存: new 用于值类型和用户定义的类型,如int、struct 自定义结构体。返回指向Type的指针。生成类型T的零值指针,注意它返回的是指针 T。*make 用于内置引用类型(只能应用于slice、map 和channel)。返回Type本身。生成slice、map、channel对象。 它们的用法就像是函数,但是将类型作为参数:new(type)、make(type)。 new(T) 分配类型 T 的零值并返回其地址,也就是指向类型 T 的指针。它也可以被用于基本类型: v := new(int) 。make(T) 返回类型 T 的初始化之后的值(实例),返回的是一个实例,而不是指针,因此它比 new 进行更多的工作,new() 是一个函数,不要忘记它的括号。 new 函数作用于值类型,仅分配内存空间,返回的是指针,make 函数作用于引用类型,除了分配内存空间,还会对对应类型进行初始化,返回的是初始值。 在 Go 语言中,引用类型包括切片(slice)、字典(map)和管道(channel),其它都是值类型。 |
len | len 用于返回某个类型的长度或数量(string、array、slice、map 和channel) |
cap | capacity是容量的意思,用于返回某个类型的最大容量(只能用于slice和 map) |
copy | 用于复制和连接slice,返回复制的数目 |
panic、recover | 两者均用于错误处理机制: panic:停止常规的goroutine recover:允许程序定义goroutine的panic动作 |
complex、real、imag | 用于创建和操作复数 complex:从指定的实部和虚部构建复数 real:返回complex的实部 imag:返回complex的虚部 |
print、println | 底层打印函数,在部署环境中建议使用 fmt 包 |
make用法示例
func make(t Type, size …IntegerType) Type
1 |
|
- make函数也用于内存分配,和new不同的地方在于,make函数只能用于chan,map和切片三种类型的创建,返回值就是对象本身,因为这三类数据结构本身就是引用类型,必须要初始化。
new用法示例
funcnew(Type) Type
1 |
|
- new函数用来创建某一个类型的指针型对象,理论上,只要一个数据类型能够被访问到,就能用new函数来创建指针类型的对象。返回值是一个指向新分配的type类型的零值的指针。
- 在Go语言中,如果使用new创建chan类型的指针对象,在使用之前仍然需要使用make函数来初始化chan的容量。
- new函数创建对象与直接使用struct{}创建的对象的区别是,前者为指向对象的一个指针,后者创建的是对象引用本身。
append用法示例
func append(slice []Type, elems …Type) []Type
1 |
|
- go语言中的append函数作用是在切片变量的后面追加新的数据,然后返回新的切片变量
- 内建函数append将元素追加到切片的末尾。若它有足够的容量,其目标就会重新切片以容纳新的元素。否则,就会分配一个新的基本数组。append返回更新后的切片,因此必须存储追加后的结果。
complex用法示例
Go提供了两种大小的复数类型:complex64和complex128,分别由float32和float64组成。func complex(r, i FloatType) ComplexType // 参数列表中r 为复数的实部,i 表示为复数的虚部
func real(c ComplexType) FloatType
func imag(c ComplexType) FloatType
1 |
|
close用法示例
func close(c chan<- Type)
1 |
|
- 内建函数close关闭信道,该通道必须为双向的或只发送的。它应当只由发送者执行,而不应由接收者执行,其效果是在最后发送的值被接收后停止该通道。在最后的值从已关闭的信道中被接收后,任何对其的接收操作都会无阻塞的成功。
- close函数用于关闭一个非只读的管道。
- close方法应该由管道的数据发送一方调用。
- 当最后一个发送的值被从管道中接收之后,后面的所有值接收都会非阻塞直接返回,返回值为元素类型的零值。
- 如果chan已经关闭,则x,ok := <- chan 中,ok为false。
panic用法示例
func panic(v interface{})
func recover() interface{}
1 |
|
- 内建函数panic停止当前Go程的正常执行。当函数F调用panic时,F的正常执行就会立刻停止。F中defer的所有函数先入后出执行后,F返回给其调用者G。G如同F一样行动,层层返回,直到该Go程中所有函数都按相反的顺序停止执行。之后,程序被终止,而错误情况会被报告,包括引发该恐慌的实参值,此终止序列称为恐慌过程。
- 内建函数recover允许程序管理恐慌过程中的Go程序。在defer的函数中,执行recover调用会取回传至panic调用的错误值,恢复正常执行,停止恐慌过程。若recover在defer的函数之外被调用,它将不会停止恐慌过程序列。在此情况下,或当该Go程不在恐慌过程中时,或提供给panic的实参为nil时,recover就会返回nil。
- panic函数表示程序中非常严重,不可恢复的错误,与java中的 try{} catch{} 类似。
- panic异常被抛出之后,会一层一层的上传至最外层,直至程序崩溃。
- recover函数用于捕获程序中抛出的panic,recover函数只能在defer延迟函数中调用。
cap用法示例
func cap(v Type) int
1 |
|
1 |
|
- len函数用来获取字符串,切片,数组,通道,字典类型变量的内容长度,不同的类型,长度的计算规则不一致。对于切片,字典,数组,通道类型的变量,他们中的每一个元素就是一个长度。string类型的变量,每一个字节都是一个长度,中文字在utf8编码中占三个字节,故len获取string类型长度时,每一个汉字都是三个长度。
- len计算的是变量已有数据的内容长度,并非是变量的容量。
- 如果v是nil,则len(v)为0。
delete用法示例
func delete(m map[Type]Type1, key Type)
1 |
|
1 |
|
Go-内置类型和内置函数
https://www.chendujin.com/posts/4312b66a.html