【Duke】Go语言的函数 011 - PingPongGooo/GoFoundation GitHub Wiki
函数 一等 公民
函数是一等公民
与其他主要编程语言的差异
1. 可以有多个返回值
2. 所有参数都是值传递:slice,map, channel 会有传引用的感觉
3. 函数可以作为变量的值
4. 函数可以作为参数和返回值
Go 语言所有的参数传递都是传值
package _func
import (
"fmt"
"math/rand"
"testing"
"time"
)
func returnMultiValues()(int, int){
return rand.Intn(10), rand.Intn(20)
}
func TestFn(t *testing.T) {
//a,b := returnMultiValues()
//t.Log(a,b)
//
//c,_:= returnMultiValues()
//t.Log(c)
//
//d,_:= returnMultiValues()
//t.Log(d)
tsSF := timeSpent(slowFun)
t.Log(tsSF(10))
}
// 有点像装饰器模式
func timeSpent(inner func (op int) int) func (op int) int {
return func (n int) int{
start := time.Now()
ret := inner(n)
fmt.Println("time spent:",time.Since(start).Seconds())
return ret
}
}
func slowFun(op int) int{
time.Sleep(time.Second * 1)
return op
}
学习函数式编程
图书推荐 《计算机程序的构造与解释》 在 MIT 大概使用了 30-40年 的 一本你计算机教程。