Go -- 函数

栏目: Go · 发布时间: 7年前

内容简介:函数可以作为延迟运行,类似于Java中的
  1. 可以有 多个返回值
  2. 所有参数都是 值传递 :slice、map、channel会有传引用的错觉
  3. 一等公民
    • 函数可以作为 变量的值
    • 函数可以作为 参数 和 返回值

多返回值

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
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

奇点临近

奇点临近

Ray Kurzweil / 董振华、李庆成 / 机械工业出版社 / 2011-10 / 69.00元

人工智能作为21世纪科技发展的最新成就,深刻揭示了科技发展为人类社会带来的巨大影响。本书结合求解智能问题的数据结构以及实现的算法,把人工智能的应用程序应用于实际环境中,并从社会和哲学、心理学以及神经生理学角度对人工智能进行了独特的讨论。本书提供了一个崭新的视角,展示了以人工智能为代表的科技现象作为一种“奇点”思潮,揭示了其在世界范围内所产生的广泛影响。本书全书分为以下几大部分:第一部分人工智能,第......一起来看看 《奇点临近》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具