统计
  • 建站日期:2018-10-21
  • 文章总数:45 篇
  • 评论总数:23 条
  • 分类总数:13 个
  • 最后更新:1月20日
推荐Go

Go的函数及可变参数和defer

本文阅读 1 分钟

函数是一等公民:

  • 可以有多个返回值
  • 所有参数都是值传递:slicemapchannel 会有传引用的错觉
  • 函数可以作为变量的值
  • 函数可以作为参数和返回值
func returnMultiValues() (int, int) {
    // 返回两个值
    return rand.Intn(10), rand.Intn(20)
}

func TestFn(t *testing.T) {
    a, b := returnMultiValues()
    t.Log(a, b) // 1 7
}

可变参数:

func Sum(ops ...int) int {
    ret := 0
    for _, op := range ops {
        ret += op
    }
    return ret
}

func TestVarParams(t *testing.T) {
    t.Log(Sum(1, 2, 3, 4))
    t.Log(Sum(1, 2, 3, 4, 5))
    /** 运行结果
    === RUN   TestVarParams
        TestVarParams: func_test.go:48: 10
        TestVarParams: func_test.go:49: 15
    --- PASS: TestVarParams (0.00s)
     */
}

defer:

在最后执行完执行,通常我们用于释放资源及释放锁

func TestDefer(t *testing.T) {
    defer func() {
        t.Log("Clean resources")
    }()
    t.Log("Started")
    // panic 手动触发宕机
    panic("Fatal error") // defer 仍然会执行
    /** 运行结果
    === RUN   TestDefer
        TestDefer: func_test.go:56: Started
        TestDefer: func_test.go:54: Clean resources
    --- FAIL: TestDefer (0.00s)
     */
}
本文来自投稿,不代表本站立场,如若转载,请注明出处:https://blog.gaobinzhan.com/archives/70.html
Go字符串
« 上一篇 05-14
Go面向对象编程
下一篇 » 05-17

发表评论

成为第一个评论的人