今天分享的内容比较基础,准确地说是 Go 的语言特性——命名、匿名返回值。

先看下面的例子,猜测会输出什么?

package main

func main() {
    println(A())
    println(B())
}

func A() int {
    var i int
    defer func() {
        i = i + 3
    }()
    return i
}

func B() (i int) {
    defer func() {
        i = i + 3
    }()
    return i
}

|

(想好答案再滑下来)

|

|

|

|

|

|

|

|

|

|

正确答案:0 3。

A 和 B 两个函数的区别在于,B 的函数返回值是命名的,所以 defer 函数执行的修改,会作用到 B 本身;

而 A 函数返回值是匿名的,取决于 return 的时候求出来的值。


文章来源于本人博客,发布于 2018-06-02,原文链接:https://imlht.com/archives/168/

仁扬
5 声望0 粉丝

骐骥一跃,不能十步;驽马十驾,功在不舍。