当前位置: 首页 > news >正文

第九章:把函数当变量传递,匿名函数、闭包、panic/recover

func main() {

	sum, sub := calc(5, 6, add)

	fmt.Println(sum, sub)

}

// 把函数当变量的形式传递过去
func calc(x, y int, op func(int, int) (int, int)) (int, int) {
	return op(x, y)

}

func add(x, y int) (int, int) {
	return x + y, x - y

}

返回一个变量值 :

package main

import "fmt"

func main() {

	sum := calc(5, 6, add)

	fmt.Println(sum)

}

// 把函数当变量的形式传递过去
func calc(x, y int, op func(int, int) int) int {
	return op(x, y)

}

func add(x, y int) int {
	return x + y

}

内置函数介绍

内置函数介绍
close主要用来关闭channel
len用来求长度,比如string、array、slice、map、channel
new用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针
make用来分配内存,主要用来分配引用类型,比如chan、map、slice
append用来追加元素到数组、slice中
panic和recover用来做错误处理

panic/recover

Go语言中目前(Go1.12)是没有异常机制,但是使用panic/recover模式来处理错误。 panic可以在任何地方引发,但recover只有在defer调用的函数中有效。 首先来看一个例子:

func funcA() {
	fmt.Println("func A")
}

func funcB() {
	defer func() {
		err := recover()
		//如果程序出出现了panic错误,可以通过recover恢复过来
		if err != nil {
			fmt.Println("recover in B")
		}
	}()  // 这里()是立即执行匿名函数
	panic("panic in B")
}

func funcC() {
	fmt.Println("func C")
}
func main() {
	funcA()
	funcB()
	funcC()
}

注意:

  1. recover()必须搭配defer使用。
  2. defer一定要在可能引发panic的语句之前定义。

相关文章:

  • 背包九讲
  • 全自动数据强制备份程序,无视占用直接硬复制各种数据文件、文档、音视频、软件、数据库等的VSS卷拷贝批处理脚本程序,解放双手,一劳永逸
  • el-table一格两行;概率;find
  • 每日一题——搜索二维矩阵
  • 动态规划--斐波那契类型
  • Java基础系列:深入解析包装器类型与类型转换的奥秘与陷阱
  • C#类型转换基本概念
  • 数据结构链表的C++实现
  • 【网络编程】同步和异步、阻塞和非阻塞,I/O和网络I/O
  • 基于Matlab的人脸识别的二维PCA
  • 3.8[a]cv
  • MySQL 面试篇
  • 静态时序分析STA——2. 数字单元库-(1)
  • Uniapp 页面返回不刷新?两种方法防止 onShow 触发多次请求!
  • 网络通信Socket中多态HandleIO设计模式深度解析
  • Hive八股
  • 计算机毕业设计SpringBoot+Vue.js社区医疗综合服务平台(源码+文档+PPT+讲解)
  • 一周热点-文本生成中的扩散模型- Mercury Coder
  • 最小栈 _ _
  • set、LinkedHashSet和TreeSet的区别、Map接口常见方法、Collections 工具类使用
  • .net网站开发的例子/营销公司
  • 俄文网站建设 俄文网站设计/网站收录查询工具
  • 怎么看一个网站是用什么代码做的/抖来查关键词搜索排名
  • 遵义在线网站建设/360搜索关键词优化软件
  • 网站建设常识/青岛网站制作公司
  • 我自己做的网站上有图片宣传食品/2020年百度搜索排名