Go 语言的函数 电脑版发表于:2020/12/30 10:15 ![go数据类型](https://img.tnblog.net/arcimg/hb/0dd243ae49394f12beed84237bfee1a3.jpg "go数据类型") >#Go 语言的函数 [TOC] 函数与其他语言的主要差异 ------------ >- 可以有多个返回值 - 所有参数都是值传递:slice,map,channel会有传引用的错觉 - 函数可以作为变量的值 - 函数可以作为参数和返回值 Demo ------------ ```go package func_test import ( "math/rand" "testing" "time" ) // 返回一个0-10,0-20的随机数 func returnMultiValues() (int, int) { // 初始化随机数的资源库, 如果不执行这行, 不管运行多少次都返回同样的值 rand.Seed(time.Now().UnixNano()) return rand.Intn(10), rand.Intn(20) } func TestFn(t *testing.T) { // 如果只需要其中的一个值 a, b := returnMultiValues() t.Log(a, b) } ``` ![](https://img.tnblog.net/arcimg/hb/1af25fccbf3e419eada697b99dbea825.png) 记录一个执行方法的时间 ------------ ```go func TestFn(t *testing.T) { // 如果只需要其中的一个值 a, b := returnMultiValues() t.Log(a, b) 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 } ``` ![](https://img.tnblog.net/arcimg/hb/88b56a0182d243abafb6bb755ac3e887.png)