Golang 基础03 函数

事先声明:函数 / 方法

函数是独立的,没有绑定到某个类型的。方法是绑定在某个类型的函数

Go 复制代码
func Sum(a int,b string)(data int,err error)
{ 
    return //这里就等价于return data,err
}

这里的函数是最常见的函数,第一个小括号是形参列表,用于表示函数接收了什么参数,第二个小括号是返回值列表,作者在此处的做法是具名返回值,也就是说这个返回值不需要重新声明就可以使用,并且retrun的时候可以直接返回,不需要指定

函数可以最为参数传递给另一个函数,在此之前我们先搞懂函数类型

函数类型只包含函数的形参类型,返回值类型

Go 复制代码
func Classify(score int, f func(int, int) (string, error)) {
	for x := range score {
		fmt.Println(f(x, x+1))
	}
}

func Test(a int, b int) (string, error) {
	return fmt.Sprintf("%d and %d", a, b), nil
}
func main() {
	Classify(4, Test)
}

在上面的例子中,Classify函数的第二个形参就是一个函数类型,只要形参和返回值对的上,任何函数都可以作为形参传递

闭包,闭包的主要作用就是让函数记住他创建时外部变量,从而保存状态、延长变量生命周期、实现一定程度上的封装

函数内部的变量的生命周期仅限于当前函数。也就是说函数每次执行都会产生新的变量。通过闭包,可以让函数内变量持久化。当然,这个持久化其实并不是真的持久

Go 复制代码
func Wai() func(string) string {
	strs := ""
	return func(str string) string {
		strs += str
		return strs
	}
}

func main() {
	c1 := Wai()
	fmt.Println(c1("nihao\n"))
	fmt.Println(c1("get it \n"))
}

当go检测到c1再也不会被使用的时候,就会释放strs的内存。

当c1被创建的时候,附带的有一个闭包空间,这个空间跟随c1的使用而存在,当c1不再被使用的时候,该空间就会释放,这个是go自己来判断的,不需要用户手动操作。所以就不会出现闭包多了内存不够的情况

相关推荐
小蒜学长3 分钟前
基于Spring Boot+Vue3的在线医疗咨询系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·在线问诊·在线医疗咨询系统
echome88822 分钟前
Python 异常处理:try、else、finally 的正确搭配
开发语言·前端·python·异常处理·编程技巧
云和数据.ChenGuang23 分钟前
Python 单继承与多继承深度剖析:从 MRO 到实战取舍
开发语言·人工智能·python·langchain
陈随易27 分钟前
下载神器!Motrix 停更三年后重写回归
前端·后端·程序员
每天一道题36 分钟前
CAP、Raft 与多数派:分布式系统如何达成一致?
分布式·后端·微服务
前端的日常1 小时前
一个人+AI做情侣食谱小程序,0 费用的服务器
前端·后端
小咕聊编程1 小时前
基于Python的豆瓣电影数据可视化系统构建分析
开发语言·python·信息可视化
IT_陈寒2 小时前
Vue的v-for里用了个临时变量,页面直接挂了
前端·人工智能·后端
ServBay2 小时前
本地模型已经跑起来了,Copilot Fusion 为什么还要联网?
后端·ai编程·github copilot
脏脏a3 小时前
延迟与画质:远程控制的生命线
开发语言·php