通学区块链系列-从go开始之函数篇(二)
Posted 通学技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通学区块链系列-从go开始之函数篇(二)相关的知识,希望对你有一定的参考价值。
通学技术,面向区块链编程
在第一篇文章中,我们学习了go的基本词法及语法,而这些东西都是静态的,作为一个拥有面向对象思想的我们,有静当然要有动,有属性当然也要有行为,那么什么能保证我们的行为呢?相信聪明的你已经知道了,那就是函数。
6、函数
go语言本着简单简洁的原则,函数的写法也是十分的简单。直接看下面的例子就知道了。
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
上面我们通过一个交换的简单算法说明了go语言的函数,有了函数之后,我们也会在特定场景下不需要函数名,说白了就是懒。懒才是进步的原动力啊。
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)
上面也是举了一个例子,来体现go语言函数式编程的思想,毕竟也是进一步减少了我们书写代码的数量,将函数做为参数去传递,有时候也确实方便。
8、闭包
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
以上的例子通过闭包的方式,实现了一个自增序列生成器,至于你想要问,为什么不直接返回一个int类型的值呢?欢迎大家参与讨论。
总体来说,go语言的函数和其他语言并无太大差别。这里机灵的小伙伴可能已经发现了,怎么go语言没有像java那样有修饰函数是公有还是私有那样的关键字public private这些呢?
这里不得不佩服go的设计大佬们,他们想到了用大小写来控制go函数是否是公有还是私有的,这可真是简洁他妈给简洁开门,简洁到家了~
package visibility
import "fmt"
const PI = 3.145
const pi = 3.14
const _PI = 3.14
var P int = 1
var p int = 1
func private_function()
fmt.Println("only used in this package!")
func Public_fuction()
fmt.Println("used in anywhere!")
package main
import (
"visibility"
"fmt"
)
func main()
visibility.Public_fuction() //used in anywhere!
//visibility.private_function() //不能访问私有函数,无法通过编译
fmt.Println(visibility.P) //1
//fmt.Println(visibility.p) //不能访问私有变量,无法通过编译
fmt.Println(visibility.PI) //3.14
//fmt.Println(visibility.pi) //不能访问私有常量,无法通过编译
//fmt.Println(visibility._PI) //不能访问私有常量,无法通过编译
好啦,关于go函数我们就介绍到这里了,下期我们将继续复习go语言的容器。
学通技术,构建可信社会。
以上是关于通学区块链系列-从go开始之函数篇(二)的主要内容,如果未能解决你的问题,请参考以下文章