第九章:把函数当变量传递,匿名函数、闭包、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的语句之前定义。

你可能感兴趣的:(golang,golang,开发语言,后端)