Go语言中的匿名函数和闭包的样子

简介: 1). 函数也是值,可以像普通值那样,传来传去; 2). 匿名函数; 3). 函数的类型,类似于:func(float64,float64) float64 ========================== 1).

1). 函数也是值,可以像普通值那样,传来传去;

2). 匿名函数;

3). 函数的类型,类似于:func(float64,float64) float64

==========================

1). 在函数式程序设计语言中,闭包都是个重要的玩意;

2). 闭包有时候让人赶脚捉摸不透;

3). 例子中 sum 的作用域、生命周期;实际上在一个函数内部返回一个匿名函数/闭包,如果这个返回函数使用了原来函数内的变量值,那么这些变量的生命周期便延长了;这不是 c 的风格,c 中的管你返回神马东西,局部 auto 变量函数返回后就消亡了(当然你可以使用 static 变量)!

package main

import (
	"fmt"
	"math"
)

func adder() func(int) int {
	sum := 0
	return func(x int) int {
		sum += x
		return sum
	}
}

func main() {

	
	hypot := func(x, y float64) float64 {
		return math.Sqrt(x*x + y*y)
	}
	
	fmt.Printf("%T %g", hypot, hypot(3, 4))
	
	pos, neg := adder(), adder()
	for i := 0; i < 10; i++ {
		fmt.Println(pos(i), neg(-2*i),)
	}
}

  

目录
相关文章
|
5天前
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
2天前
|
Go
go语言map、实现set
go语言map、实现set
9 0
|
2天前
|
Go
go语言数组与切片
go语言数组与切片
10 0
|
4天前
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
104 5
在go语言服务中封装路由和示例
|
1天前
|
Devops Go 云计算
Go语言发展现状:历史、应用、优势与挑战
Go语言发展现状:历史、应用、优势与挑战
9 2
|
2天前
|
Go
go语言的hello,world
go语言的hello,world
7 1
|
5天前
|
Unix Go 开发者
探索Go语言并发模型:原理与实践
本文深入探讨了Go语言的并发模型,包括其设计原理、Goroutine和Channel的基本使用,以及如何在实际项目中高效地应用这些概念来提高程序的性能和可维护性。
|
1天前
|
编译器 Go 开发者
Go语言语法基础入门
Go语言语法基础入门
4 0
|
2天前
|
Go
go的函数定义、递归、延迟、匿名、高阶、闭包
go的函数定义、递归、延迟、匿名、高阶、闭包
7 0
|
2天前
|
Java Go Windows
go语言实现加减法出题器(再也不用担心孩子学习了)
go语言实现加减法出题器(再也不用担心孩子学习了)
6 0