Go语言学习:函数

函数定义

go语言中通过关键字 func 来定义函数
func 函数名(参数)返回指{
函数体
}

无参无返回值
func f1(){
	fmt.Println("hello go")
}
有参无返回值
func f2(x int){
	fmt.Println("hello go")
}

多个同类型参数可以省略上一个或者多个

func f3( x, y int,z bool){
	fmt.Println(x,y,z)
}

单个参数也可以省略 但是不推荐使用

func f4( int){
	fmt.Println("我这个参数怎么接")
}
无参有返回值
func f5() (z int) {
	x := 10
	y := 2
	z = x * y
	return
}

同样也可以省略

func f6() int {
	x := 10
	y := 2
	return x * y
}

go 支持多个参数返回 多个参数返回必须要加括号

func f7() ( x,y int) {
	x = 10
	y = 2
	return x,y
}
有参有返回值
func f8(x, y int) (z int) {
	z = x * y
	return
}
可变参数

可变参数可以接收多个同类型的参数
接收的数据结构是一个切片

func main() {
	f5(10, 20,30,40)
}
func f9(x... int) {
	fmt.Println(x)
}
//输出
//[10 20 30 40]

可变参数必须是在参数的最后一个

func f5(x, y string ,z... int) {
	fmt.Println(x,y,z) 
}
匿名函数

匿名函数 不需要有方法名字
匿名函数是立即使用的

	num := func(x, y int) int {
		
		return x * y
		
	}(10, 20)
	
	fmt.Println(num)
进阶 函数作为参数传递
func main() {

	fmt.Println(calc(10,50,add))
}

func add(x, y int) (z int) {
	z = x + y
	return
}
func calc(x,y int ,op func(int ,int ) int )int{
	return  op(x,y)
}
进阶 函数作为返回值
func main() {
	p := radd("+")
	fmt.Println(p(10,20))
}
func radd (str string) (op func(int ,int ) int){
	if str == "+"{
		return add
	}else{
		return nil
	}
}
进阶 闭包

闭包=函数+引用环境
从demo中看更直观

func main() {
 var f = add_count()
 	fmt.Println(f(10))
	fmt.Println(f(20))
	fmt.Println(f(30))
	fmt.Println(f(40))
}

func add_count() func(int) int {
	var x int
	return func(y int) int {
		x += y
		return x
	}
}
//输出
//10 , 30 , 60 , 100

当f变量被声明出来后 形成了一个闭包
在其有效期内 声明的x会一直存在
简单的说 走一走debug就明白了。

发布了12 篇原创文章 · 获赞 1 · 访问量 1307

猜你喜欢

转载自blog.csdn.net/ZHOUAXING/article/details/105047176