0
点赞
收藏
分享

微信扫一扫

Go语言——函数与闭包

圣杰 2023-08-09 阅读 78
javaspring

1 函数定义

在Go语言中定义函数使用func关键字,格式如下

func 函数名(参数) (返回值){
		函数体
}
  • 函数名:由字母、数字、下划线组成。但首字母不能为数字,同一个包下,函数名称也不能重复
  • 参数:名称和类型组成,多个参数之间使用,分隔
  • 返回值:由返回值名称和返回值类型组成,返回值名称可以省略,多个返回值需要用()包裹,并用,分隔
  • 函数体:实现指定功能的代码块

如下即为一个求和函数:

func calcSum(x, y int) int{
  return x + y
}

2 函数作为参数传递

package main

import (
	"fmt"
)

//声明一个函数类型
type cb func(int) int

func main() {
	testCallBack(1, callBack)
	testCallBack(2, func(x int) int {
		fmt.Printf("我是回调,x:%d\n", x)
		return x
	})
}

func testCallBack(x int, f cb) {
	f(x)
}

func callBack(x int) int {
	fmt.Printf("我是回调函数,x:%d\n", x)
	return x
}

3 匿名函数与闭包

匿名定义格式如下

func (参数) (返回值) {
  函数体
}

立即执行函数

匿名函数定义完后面加()直接执行

func main(){
  func(x, y int){
    fmt.Println(x + y)
  }(10, 20)
}

闭包

package main

import (
	"fmt"
)

func getSequence() func() int {
	i := 0
	return func() int {
		i += 1
		return i
	}
}
func main() {
	/* nextNumber 是一个函数 函数i为0 */
	nextNumber := getSequence()

	/* 调用 nextNumber 函数,i变量自增1并返回 */
	fmt.Println(nextNumber())
	fmt.Println(nextNumber())
	fmt.Println(nextNumber())

	/* 创建新的函数 nextNumber1, 并查看结果 */
	nextNumber1 := getSequence()
	fmt.Println(nextNumber1())
	fmt.Println(nextNumber1())
}
举报

相关推荐

0 条评论