Go 匿名返回值的坑——这道题据说 90% 的同学都答错了!

简介: 今天分享 Go 的语言特性——命名、匿名返回值!据说 90% 的同学都答错了,你答对了吗?快进来试试看!

今天分享的内容比较基础,准确地说是 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/

目录
相关文章
|
6月前
|
存储 Go
Go 语言函数、参数和返回值详解
函数是一组语句,可以在程序中重复使用。函数不会在页面加载时自动执行。函数将通过调用函数来执行。
120 0
|
6月前
|
Go
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
【4月更文挑战第21天】Go语言函数是代码组织的基本单元,用于封装可重用逻辑。本文介绍了函数定义(包括基本形式、命名、参数列表和多返回值)、调用以及匿名函数与闭包。在函数定义时,注意参数命名和注释,避免参数顺序混淆。在调用时,要检查并处理多返回值中的错误。理解闭包原理,小心处理外部变量引用,以提升代码质量和可维护性。通过实践和示例,能更好地掌握Go语言函数。
98 1
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
|
Go
Go 语言为什么建议 append 追加新元素使用原切片变量接收返回值?
Go 语言为什么建议 append 追加新元素使用原切片变量接收返回值?
45 0
|
6月前
|
Go
Go语言:多重返回值的神奇之处
【2月更文挑战第24天】
124 5
|
6月前
|
供应链 算法 安全
掌握Go语言:函数精髓,定义、参数、多返回值与应用(14)
掌握Go语言:函数精髓,定义、参数、多返回值与应用(14)
|
Go
详细介绍 Go 语言中函数的特点、定义、参数传递、返回值、匿名函数
详细介绍 Go 语言中函数的特点、定义、参数传递、返回值、匿名函数
150 39
详细介绍 Go 语言中函数的特点、定义、参数传递、返回值、匿名函数
Mgo
|
Shell Go
go调用shell命令两种方式实现(有无返回值)
go调用shell命令两种方式实现(有无返回值)
Mgo
1590 1
|
程序员 编译器 数据库连接
【GO】函数返回值为映射和切片
【GO】函数返回值为映射和切片
255 0
【GO】函数返回值为映射和切片
【go系列4】golang 函数命名返回值
【go系列4】golang 函数命名返回值
592 0