通学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语言系列之函数(二)的主要内容,如果未能解决你的问题,请参考以下文章

通学区块链系列-从go开始之函数篇(二)

通学go语言系列之容器

通学go语言系列之面向对象

通学go语言系列之基础变量及语句

通学区块链系列-从go开始之面向对象

通学区块链系列-从go开始之面向对象