The way go to go的六章总结

函数(function)

介绍
Go语言是编译型语言,编译成机器语言,优点是执行速度快。(C语言)
Java是解释性语言,先编译成class文件,然后根据不同的操作系统再进行解释。

函数参数,返回值以及返回值的类型被称为函数签名;

Go中不允许函数重载;(重载需要类型匹配影响性能;这样的话,只需要函数调度)

函数可以相互比较(前提是引用的是相同函数或者nil);但是不能嵌套(解决方案是会用匿名函数)

Go没有泛式,最好是为每一个类型单独创建一个函数,这样代码可读性更强。(也是处于性能的考虑)

函数参数与返回值

  1. 引用传递和值传递跟Java一样
  2. return 或者return var都是可以的,前者就体现了Go语言的高效(毕竟已经指明了返回值,就不用在这里再写一次了)
  3. 尽量使用命名返回值(这种机制才做出来很让人烦恼,毕竟不推荐但是有,总会有人图省事的)

传递变长参数
三种形式处理:

  1. …type
  2. 使用结构
  3. 使用空接口
    (这种变长参数大概是因为没有重载这种机制,为了弥补而出现的)

defer和追踪

  1. defer允许我们推迟到函数返回之前来执行某个操作(类似于java的finally 用于释放某些资源)多个defer会逆序执行
  2. 第二个功能是追踪
    我觉得第一个功能只能说是方便了编程人员的工作,第二个追踪在我看来更加实用。

内置函数
递归函数

  1. 问题一是栈空间溢出,可以用懒惰求值解决 在Go语言中使用管道和goroutine
  2. 注意 多个函数之间互相调用,形成的闭环问题

将函数作为参数
闭包

  1. 匿名函数,不能独立存在 要么 赋值于某个变量,要么直接调用
  2. 匿名函数也叫做闭包,闭包可以使得某个函数捕捉到一些外部状态

应用闭包:将函数作为返回值

  1. 刚好昨天看了JS的闭包,都是一样的东西,设置一个私有区域的值。
    闭包函数保存并积累其中的变量的值,不管外部函数退出与否,都能继续操作外部函数中的局部变量。
  2. 高阶函数,有点高数的意思,我们把函数看成一个值,值嵌套一个值那样的话不就是高阶的意思吗,就叫做高阶函数。

使用闭包调试
这个很有用,就是很多包内的函数在执行,你想知道那个函数执行了或者执行的顺序等,可以用闭包来统计数值(调用的顺序),通过runtime或log包中的特殊函数来实现这样的功能。

计算函数执行的时间
利用time包中的Now()和Sub()函数
这节好无聊啊

通过内存缓存来提升性能
这个就是通过存储出现过得值来提升运算效率啊。算法中的东西。
适合那些大量计算,其中包含很多重复结果的例子。