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自己来判断的,不需要用户手动操作。所以就不会出现闭包多了内存不够的情况

相关推荐
JWASX1 小时前
go 学习 - prometheus 指标协程池监控
学习·golang·prometheus
Do_It_Today1 小时前
PHP xpath()函数讲解
开发语言·php
YYYing.1 小时前
【Python系列 (一) 】Python基础疑难杂症
开发语言·python
rannn_1111 小时前
JVM 垃圾回收面试题全解析:从基础到进阶
java·开发语言·jvm·后端·面试
AINative软件工程1 小时前
LLM 应用的 Observability 三件套:Metrics、Logs、Traces 的生产级接入工程实践
后端·python·架构
geovindu1 小时前
rust: Simple Factory Pattern(续)
后端·设计模式·rust·简单工厂模式·创建型模式
知野小兔1 小时前
JavaScript 数组方法大全(超详细整理)
开发语言·前端·javascript
哈__1 小时前
飞牛OS还在手动维护?我用Ansible把重复操作写成了Playbook
开发语言·ansible·php
道尔柯南1 小时前
【QT】从零认识 Qt:跨平台 C++ GUI 开发入门
开发语言·c++·qt