内容简介:函数可以作为延迟运行,类似于Java中的
- 可以有 多个返回值
- 所有参数都是 值传递 :slice、map、channel会有传引用的错觉
-
一等公民
- 函数可以作为 变量的值
- 函数可以作为 参数 和 返回值
多返回值
func returnMultiValues() (int, int) {
return rand.Intn(10), rand.Intn(20)
}
func TestReturnMultiValues(t *testing.T) {
a, b := returnMultiValues()
t.Log(a, b) // 1 7
}
一等公民
函数可以作为 参数 和 返回值
// 入参:func(op int) int
// 出参:func(op int) int
func timeSpent(inner func(op int) int) func(op int) int {
// 函数式编程
return func(op int) int {
start := time.Now()
ret := inner(op)
fmt.Println("time spent : ", time.Since(start).Seconds())
return ret
}
}
func slowFunc(op int) int {
time.Sleep(time.Second * 1)
return op
}
func TestFuncAsParam(t *testing.T) {
// f是通过函数式编程封装后的函数,增强了原有函数的功能
f := timeSpent(slowFunc)
t.Log(f(10))
// 输出:
// time spent : 1.004157729
// 10
}
可变参数
func sum(ops ...int) int {
ret := 0
for _, op := range ops {
ret += op
}
return ret
}
func TestVarParam(t *testing.T) {
t.Log(sum(1, 2, 3, 4)) // 10
}
defer
延迟运行,类似于 Java 中的 finally ,主要用于释放某些资源
func TestDefer(t *testing.T) {
defer clear()
fmt.Println("Start")
panic("Fatal Error") // 依然会执行clear()
fmt.Println("End") // 不可达
// Start
// Clear Resources.
// --- FAIL: TestDefer (0.00s)
// panic: Fatal Error [recovered]
// panic: Fatal Error
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
马云现象的经济学分析:互联网经济的八个关键命题
胡晓鹏 / 上海社会科学院出版社 / 2016-11-1 / CNY 68.00
互联网经济的产生、发展与扩张,在冲击传统经济理论观点的同时,也彰显了自身理论体系的独特内核,并与那种立足于工业经济时代的经典理论发生显著分野。今天看来,“马云”们的成功是中国经济长期“重制造、轻服务,重产能、轻消费,重国有、轻民营”发展逻辑的结果。但互联网经济的发展却不应仅仅止步于商业技巧的翻新,还需要在理论上进行一番审慎的思考。对此,我们不禁要问:互联网经济驱动交易发生的机理是什么?用户基数和诚......一起来看看 《马云现象的经济学分析:互联网经济的八个关键命题》 这本书的介绍吧!