bleer

欢迎你来到我的空间哦~

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

函数的基本写法

func add(a int, b int) int {
	return a + b
}

 

如果2个参数的类型一样,可以简写为

func add(a, b int) int {
	return a + b
}

  

 多个返回值

func add_substract(a int, b int) (int, int) {
	return a + b, a - b
}

  

忽略多个返回值中的某一个

func add_substract(a, b int) (int, int) {
	return a + b, a - b
}

n1, _ := add_substract(3, 4)

  

定义函数类型

func add(a int, b int) int {
	return a + b
}

func sub(a, b int) int {
	return a - b
}

type Cal func(int, int) int

func do(f Cal, a, b int) int {
	return f(a, b)
}

func main() {
n1 := do(add, 3, 5) n2 := do(sub, 5, 3)
fmt.Println("n1 =", n1) fmt.Println("n2 =", n2) }

  

不定参数的场景

不定参数函数的形参可以为不定参数,或者为切片。

但是这是2种不同的函数类型。

func get_sum(data ...int) {
	sum := 0
	for _, v := range data {
		sum += v
	}
	fmt.Println(sum)
	return
}

func main() {
	fmt.Println("Hello World!")

	get_sum(1, 2, 3)
	slice := make([]int, 3)
	slice[0] = 1
	slice[1] = 2
	get_sum(slice...)
}

  

运行结果

Hello World!
6
3
成功: 进程退出代码 0.

  

defer函数

defer函数的主要作用为了保证资源的回收和释放。

当defer函数放在return之后时,不会被执行。

当defer函数所在的程序调用了os.Exit(),不管是Exit(0),Exit(1),defer都不会被执行。

defer函数后面的()里面是为了放实参的。

func main() {
	fmt.Println("Hello World!")

	defer func(x int) {
		fmt.Println("defer x=", x)
	}(1)

	fmt.Println("test end")

	//	os.Exit(0)
	os.Exit(1)
}

  

运行结果

Hello World!
test end
exit status 1
错误: 进程退出代码 1.

  

多个defer函数放在一起,最后的defer先执行。(defer充分贯彻落实FILO)

 

posted on 2019-03-22 14:09  bleer  阅读(124)  评论(0编辑  收藏  举报