The way go to go的六章总结
函数(function)
介绍
Go语言是编译型语言,编译成机器语言,优点是执行速度快。(C语言)
Java是解释性语言,先编译成class文件,然后根据不同的操作系统再进行解释。
函数参数,返回值以及返回值的类型被称为函数签名;
Go中不允许函数重载;(重载需要类型匹配影响性能;这样的话,只需要函数调度)
函数可以相互比较(前提是引用的是相同函数或者nil);但是不能嵌套(解决方案是会用匿名函数)
Go没有泛式,最好是为每一个类型单独创建一个函数,这样代码可读性更强。(也是处于性能的考虑)
函数参数与返回值
- 引用传递和值传递跟Java一样
- return 或者return var都是可以的,前者就体现了Go语言的高效(毕竟已经指明了返回值,就不用在这里再写一次了)
- 尽量使用命名返回值(这种机制才做出来很让人烦恼,毕竟不推荐但是有,总会有人图省事的)
传递变长参数
三种形式处理:
- …type
- 使用结构
- 使用空接口
(这种变长参数大概是因为没有重载这种机制,为了弥补而出现的)
defer和追踪
- defer允许我们推迟到函数返回之前来执行某个操作(类似于java的finally 用于释放某些资源)多个defer会逆序执行
- 第二个功能是追踪
我觉得第一个功能只能说是方便了编程人员的工作,第二个追踪在我看来更加实用。
内置函数
递归函数
- 问题一是栈空间溢出,可以用懒惰求值解决 在Go语言中使用管道和goroutine
- 注意 多个函数之间互相调用,形成的闭环问题
将函数作为参数
闭包
- 匿名函数,不能独立存在 要么 赋值于某个变量,要么直接调用
- 匿名函数也叫做闭包,闭包可以使得某个函数捕捉到一些外部状态
应用闭包:将函数作为返回值
- 刚好昨天看了JS的闭包,都是一样的东西,设置一个私有区域的值。
闭包函数保存并积累其中的变量的值,不管外部函数退出与否,都能继续操作外部函数中的局部变量。 - 高阶函数,有点高数的意思,我们把函数看成一个值,值嵌套一个值那样的话不就是高阶的意思吗,就叫做高阶函数。
使用闭包调试
这个很有用,就是很多包内的函数在执行,你想知道那个函数执行了或者执行的顺序等,可以用闭包来统计数值(调用的顺序),通过runtime或log包中的特殊函数来实现这样的功能。
计算函数执行的时间
利用time包中的Now()和Sub()函数
这节好无聊啊
通过内存缓存来提升性能
这个就是通过存储出现过得值来提升运算效率啊。算法中的东西。
适合那些大量计算,其中包含很多重复结果的例子。