go-基础-3-函数-记录

go 函数

类似JavaScript

函数声明

func fuction_name([paramater_list]) [return_types] {
	content
}

函数类型

  • 无参无返回值函数
  • 有一个参数的函数
  • 有两个参数的函数
  • 有个返回值的函数
  • 有多个返回值的函数
// 无参无返回
func printInfo() {
	fmt.Println("printinfo")
}

// 有一个参数无返回
func printInfo1(a string) {
	fmt.Println(a)
}

// 有2个参数无返回
func printInfo2(a string, b int) {
	fmt.Println(a + string(b))
}
// 有多个参数和多个返回值
func addAndSub(a, b int) (int, int) {
	return a + b, a - b
}

形式参数和实际参数

  • 形式参数:函数定义时,用来接受外部传入数据的参数,就是形式参数
  • 实际参数:调用函数时,传给形参的实际数据叫做实际参数
  • 可变参数:函数定义时,参数名+…+类型表示可变参数;一个函数有多个参数时,可变参数一定要放最后面,并且一个函数只会有一个可变参数。

参数传递

按数据存储的特点分:

  • 值类型的数据:操作的是数据本身,int、string、bool、float64、array等(java中的基本类型)
  • 引用类型的数据:操作的是数据的地址slice、map、chan等(java中的封装类型)

值传递:传递的类型是值类型数据

引用传递:传递的是引用类型的数据

defer 延迟函数

最后执行,多个的情况下,先定义的后执行,类似栈;多用于关闭

匿名函数

//匿名函数
	f := func(a, b int) int {
		return a + b
	}
	fmt.Println(f(1, 2))
	fmt.Println(func(a, b int) int {
		return a + b
	}(3, 4))

回调函数

一个函数可以作为另一个函数的参数

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

// 高阶函数,可以接受另一个函数作为参数
func op(a, b int, f func(c, d int) int) int {
	return f(a, b)
}

func main() {
	fmt.Println(op(3, 4, add))
	fmt.Println(op(3, 4, sub))
}

闭包

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