golang学习总结--函数

1.go函数声明语法:func 函数名 (参数列表) (返回值列表){}

func add()(){
}

2.golang函数特点

  (1)不支持重载:一个包中不能有两个函数名称一样的函数,即使参数列表不同

  (2)多返回值

  (3)匿名函数

  (4)函数是一种类型,也可以赋值给一个变量

  (5)函数名大小写敏感,函数名首字母表示该函数可跨包调用,小写表示不可跨包调用

package main

import (
	"fmt"
)

type op_func func(int, int) int

//多返回值的例子
func Calc(a int, b int) (int, int) {
	sum := a + b
	avg := (a + b) / 2
	return sum, avg
}

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

func calc(a, b int) (sum int, avg int) {
	sum = a + b
	avg = (a + b) / 2
	return
}

func operator(op op_func, a, b int) int {

	return op(a, b)
}

//可变参函数例子,第一个参数固定,从第二个开始是可变参
func add1(a int, arg ...int) int {
	var sum int = a
	for i := 0; i < len(arg); i++ {
		sum += arg[i]
	}

	return sum
}

func main() {
	c := add(100, 200)
	fmt.Println(c)

	var d op_func
	d = add
	fmt.Println(add)
	fmt.Println(d)

	//函数赋值例子,类似于c语言函数指针的使用方法
	sum := operator(d, 100, 200)
	fmt.Println(sum)

	//注意顺序不能反
	sum1, avg1 := calc(10, 20)
	fmt.Println("sum1: ", sum1, ", avg1: ", avg1)

	sum2 := add1(10, 3, 3, 3, 3)
	fmt.Println("sum2: ", sum2)
}

3.defer关键字

go语言中的defer关键字表示延迟执行,在函数结束时执行,因此可以在defer中做一些关闭文件描述符,资源释放,断开数据库连接等操作。

(1)defer的执行时机:defer语句在函数返回之前 或者 函数中 return语句(return语句可能调用另一个函数) 之后执行。例子:

package main

import (
	"fmt"
)

func main() {
	fmt.Println(deferReturn())
}

func deferReturn() (ret int) {
	defer func() {
		ret++
	}()
	return 10
}

输出结果是:11,原因是defer在return之后执行,对返回值ret的值10执行+1操作

(2)多个defer语句的执行顺序是先进后出

package main

import (
	"fmt"
)

func deferMulti() {
	for i := 0; i < 5; i++ {
		defer fmt.Printf("%d ", i)
	}
}

func main() {
	deferMulti()
}

输出结果:4 3 2 1 0

4._标识符,用来忽略函数返回值

package main

import (
	"fmt"
)

func calc(a, b int) (sum int, avg int) {
	sum = a + b
	avg = (a + b) / 2
	return
}

func main() {
	sum, _ := calc(10, 20)
	fmt.Println(sum)
}

输出结果:30

猜你喜欢

转载自blog.csdn.net/weixin_44843859/article/details/110374752