大家好,今天将梳理出的 Go语言内建函数内容,分享给大家。 请多多指教,谢谢。
本次《Go语言内建函数使用》共分为两个章节,本文为第二章节
- Golang 基础之内建函数使用 (一)
- Golang 基础之内建函数使用 (二)
本节知识点
- close
- delete
- complex
- real
- imag
- panic
- recover
close
介绍
close内建函数,其功能是关闭一个通道,该通道必须是双向或仅发送。它只能由发送者执行,而不能由发送者执行接收器,并具有在最后一次发送值被接收。在从已关闭的通道c,任何来自c的接收都将在不阻塞的情况下成功,返回通道元素的值为零。
代码语言:javascript复制func close(c chan<- Type) // 函数原型
注意: 对于值为nil的channel或者对同一个channel重复close, 都会panic, 关闭只读channel会报编译错误。
使用
代码语言:javascript复制ch1 := make(chan int, 1) // 双向通道
ch2 := make(chan<- int, 1) // 只写通道
close(ch1)
close(ch2)
delete
介绍
delete内置函数,是删除指定键值(map)元素。如果map是nil或没有这样的元素,delete是禁止删除的。
代码语言:javascript复制func delete(m map[Type]Type1, key Type) // 函数原型
上面函数原型中 Type1类型, 仅用于文档编制。这是一个替身对于任何Go类型,但表示任何给定函数的相同类型。
使用
delete 删除key后,输出数据结构
代码语言:javascript复制mapInfo := make(map[string]int)
mapInfo["key1"] = 1
mapInfo["key2"] = 2
mapInfo["key3"] = 3
delete(mapInfo, "key1") //delete key1后输出map集合key和value
for k, v := range mapInfo {
fmt.Printf("key:%s value:%d n", k, v)
}
输出
代码语言:javascript复制key:key2 value:2
key:key3 value:3
complex
介绍
complex内置函数,从指定的实部和虚部构建复数。
代码语言:javascript复制func complex(r, i FloatType) ComplexType // 函数原型
Go提供了两种大小的复数类型:complex64 和 complex128,分别由 float32 和 float64 组成。
使用
代码语言:javascript复制complex(1, 2) // 构建复数
real、imag
介绍
内置函数 real
和 imag
用来获取复数的实部和虚部。
func real(c ComplexType) FloatType // 函数原型
func imag(c ComplexType) FloatType // 函数原型
使用
代码语言:javascript复制var x complex128 = complex(1, 2) // 1 2i 构建复数
var y complex128 = complex(3, 4) // 3 4i 构建复数
fmt.Println(x*y) // "(-5 10i)"
fmt.Println(real(x*y)) // "-5" 获取实部
fmt.Println(imag(x*y)) // "10" 获取虚部
panic
介绍
panic内建函数,是在程序运行时才回抛出来的异常错误。在panic被抛出之后,如果没有在程序里添加任何保护措施的话,程序就会在打印出panic的详情,终止运行。
代码语言:javascript复制func panic(v interface{}) // 函数原型
Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。
使用
代码语言:javascript复制// 引发panic
panic("出现错误")
recover
介绍
recover内建函数,会捕获错误信息,使该错误信息终止报告。 (用来控制一个goroutine的panicking行为,捕获panic,从而影响应用的行为)
代码语言:javascript复制func recover() interface{} // 函数原型
使用recvoer内建函数,通常在延迟函数中执行恢复调用。
- 在defer函数中,通过recever来终止一个goroutine的panicking过程,从而恢复正常代码的执行
- 可以获取通过panic传递的error
- 利用recover处理panic指令,defer必须在panic之前声明,否则当panic时,recover无法捕获到panic。
使用
代码语言:javascript复制package main
import "fmt"
func main() {
defer func() { // 必须要先声明defer,否则不能捕获到panic异常
if err := recover(); err != nil {
fmt.Println(err) // panic内建函数传入的内容
}
fmt.Println("recover执行后") // 最后执行
}()
fmt.Println("正常执行")
panic("panic错误")
}
输出
代码语言:javascript复制正常执行
panic错误
recover执行后
技术文章持续更新~~