使用tyep关键字定义一个底层类型为函数类型的自定义类类型一、认识
Go语言,函数是没有接收者的,但方法有
二、声明基本类型
基本结构:(main()函数是无参数,无返回值的)
func function_name( [parameter list] ) [return_types] {
函数体
}
->function_name:函数名称,函数名和参数列表一起构成了函数签名。
->parameter list:参数列表,指定的是参数类型、顺序、及参数个数。参数是可选的,即函数可以不包含参数。参数就像一个占位符,这是参数被称为形参,当函数被调用时,将具体的值传递给参数,这个值被称为实际参数。
->return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。这里需要注意的是Go函数支持多返回值。有些功能不需要返回值,这种情况下 return_types 不是必须的。
->函数体:函数定义的代码集合,表示函数完成的动作。
三、传递
1) 使用tyep关键字定义一个底层类型为函数类型的自定义类类型
func add(a, b int) int {
returna + b
}
func sub(a, b int) int {
returna - b
}
type Op func(int, int) int
func do(f Op, a , b int) int {
//f理解为一个新的函数名,类型是Op,纯属自我理解,为了方便记忆,调用时直接对f传函数名
return f(a, b)
}
func main() {
a := do(add, 1, 2)
fmt.Println(a)
s := do(sub, 1, 2)
fmt.Println(s)
f := add //将add函数赋值给f,理解为重命名
sum := f(3, 5)
fmt.Println(sum)
}
2)作为参数
**只要被调用函数的返回值个数, 返回值类型和返回值顺序与调用函数所需求的实参一致,就可以把这个被调用函数当做其他函数的参数
func f1(a, b, c int)==>需求三个实参
func f2(a, b int)(int, int, int)==>返回值3个
func f1(f2(a, b))
四、匿名函数【匿名函数由一个不带函数名的函数声明和函数体组成】
GO语言的匿名函数(anonymous function),其实就是闭包.是指不需要定义函数名的一种函数实现方式, 可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。
要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量以及它们引用的对象没有被释放)为自由变量提供绑定的作用域。
func(a, b int, z float64) bool{
return a*b
}