通学go语言系列之函数(二)
Posted 通学技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通学go语言系列之函数(二)相关的知识,希望对你有一定的参考价值。
通学技术,面向区块链编程
6、函数
package main
import "fmt"
//函数 举例 数字互换
func main(){
a,b := 1,2
swap1(a,b)
fmt.Println(a,b)
swap2(&a,&b)
fmt.Println(a,b)
swap3(a,b)
fmt.Println(a,b)
}
// swap内部对参数进行的修改 并不会影响到swap调用时传入的a和b本身。
func swap1(a,b int) {
temp := a
a = b
b = temp
}
// 指针交换
func swap2(a,b *int){
temp := *a
*a = *b
*b = temp
}
// 返回多个返回值
func swap3(a,b int) (int,int){
return b,a
}
7、匿名函数
package main
import "fmt"
// 匿名函数
//c := func(a, b int) int {
// return a + b
//}(10, 20)
func main(){
a := add_sub(10,20,add)
fmt.Println(a)
b := add_sub(10,20,sub)
fmt.Println(b)
}
func add(a,b int) int{
return a+b
}
func sub(a,b int) int{
return a-b
}
// 将函数作为函数的参数-- 函数式编程的思想
func add_sub(a,b int, f func(a,b int) int) int{
return f(a,b)
}
闭包
package main
import "fmt"
//闭包--在自函数内部中 可以读取 父函数的变量
func main(){
// nexNumer()和f()中i的内存地址是相互独立 ,所以最终 返回不受影响
nextNumber := getSequence()
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
f := getSequence()
fmt.Println(f())
fmt.Println(f())
fmt.Println(nextNumber())
}
// 返回的是一个函数 而返回函数的返回是一个int类型的值 实现了自增序列
func getSequence() func() int{
i := 0
return func() int{
i += 1
return i
}
}
学通技术,构建可信社会。
以上是关于通学go语言系列之函数(二)的主要内容,如果未能解决你的问题,请参考以下文章