Golang 基础之内建函数使用 (二)

2022-06-05 10:48:18 浏览数 (1)

大家好,今天将梳理出的 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

介绍

内置函数 realimag 用来获取复数的实部和虚部。

代码语言:javascript复制
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内建函数,通常在延迟函数中执行恢复调用。

  1. 在defer函数中,通过recever来终止一个goroutine的panicking过程,从而恢复正常代码的执行
  2. 可以获取通过panic传递的error
  3. 利用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执行后

技术文章持续更新~~

0 人点赞