首页 > 其他分享 >Go语言——函数与闭包

Go语言——函数与闭包

时间:2023-08-09 19:31:53浏览次数:43  
标签:闭包 函数 int fmt Println func Go 返回值

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())
}

标签:闭包,函数,int,fmt,Println,func,Go,返回值
From: https://blog.51cto.com/u_11906056/7024434

相关文章

  • Python | 函数、数据容器
    1.函数函数:是组织好的,可重复使用的,用来实现特定功能的代码段。1.1简单案例重复使用计算字符串的长度str1="heystar"str2="python"str3="abcd"count=0for_instr1:count+=1print(f"字符串{str1}的长度是:{count}")count=0for_instr2:coun......
  • filter() 函数
     1.  filter()函数    用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用list()来转换。该接收两个参数,    第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True......
  • Django REST framework
    简介在Django框架基础之上,进行二次开发用于构建RestfulAPI简称为DRF框架或RESTframework 特性提供了强大的Serialize序列化器,可以高效进行序列化与反序列化操作提供了极为丰富的类视图、Mixin扩张类、ViewSet视图集提供了直观的We......
  • JMeter有对手了?RunnerGo这些功能真不错!
    当谈到对于性能测试的需求时,JMeter和RunnerGo在测试场景设置、执行性能测试、性能测试结果分析等方面都提供了很多功能,但两个工具仍然存在一些区别。以下是详细的比较分析:层次分明的模块化设计告别文件管理混乱:JMeter的设计倾向于单体结构,即将所有测试元素组合在一个文件中,一个文件......
  • JMeter有对手了?RunnerGo这些功能真不错!
    当谈到对于性能测试的需求时,JMeter和RunnerGo在测试场景设置、执行性能测试、性能测试结果分析等方面都提供了很多功能,但两个工具仍然存在一些区别。以下是详细的比较分析:层次分明的模块化设计告别文件管理混乱:JMeter的设计倾向于单体结构,即将所有测试元素组合在一个文件中,一个......
  • 无涯教程-Perl - getprotobynumber函数
    描述此函数在标量context中将协议NUMBER转换为其对应的名称,在列表context中将其名称和相关信息转换为:($name,$aliases,$protocol_number)。语法以下是此函数的简单语法-getprotobynumberNUMBER返回值此函数针对错误返回undef,否则返回标量context中的协议编号,并在列......
  • 免费 | 线上直播 | Google Cloud 如何为零售业提供增长解决方案?
    新的线上直播课程又来咯!赶快报名参加吧!时间:8月16日15:00-15:30直播地址:点击链接报名获取01.活动流程15:00-15:20GoogleCloud如何为零售业提供增长解决方案?15:20-15:30Q&A02.活动亮点亮点1:零售业多方面多维度讲解助您全面获取零售业相关信息。亮点2:零售领域深度......
  • django的queryset和objects对象
    1.queryset是查询集,就是传到服务器上的url里面的内容。Django会对查询返回的结果集QerySet进行缓存,这里是为了提高查询效率。  也就是说,在你创建一个QuerySet对象的时候,Django并不会立即向数据库发出查询命令,只有在你需要用到这个QuerySet的时候才回去数据库查询。2.Objects......
  • 让 GPT-4 给开源项目 GoPool Review 社区贡献者的 PR - 每天5分钟玩转 GPT 编程系列(5
    目录1.嘚瑟一下2.言归正传2.1GoPool的第一个PR2.2祭出GPT-42.3问问GPT-4怎么看这个PR2.4让GPT-4重构代码3.打完收工1.嘚瑟一下你还记得那个宣称自己性能全网第一的GolangWorkerPool不?对,就是能够GoPool,据说作者拿着GPT-4只花了3天就把这个项目肝出来了。......
  • go语言入门1---环境搭建以及helloworld
    go语言入门11环境搭建1.1安装go首先,在go官网下载,下面两个都行go版本-windows-amd64.msi,一直next就行,安装目录写成C:\Go\就行go版本-windows-amd64.zip压缩包直接压缩,将go文件直接移到C盘下新建的Go文件夹下。1.2添加环境变量将C:\Go\bin添加到环境变量path中1.3测试go......