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

Go 匿名返回值的坑——这道题据说 90% 的同学都答错了!的更多相关文章

  1. WebApi接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.作为程序猿,我们都知道参数和返回值是编程领域不可分割的两大块,此前分享了 ...

  2. JS中函数的本质,定义、调用,以及函数的参数和返回值

    要用面向对象的方式去编程,而不要用面向过程的方式去编程 对象是各种类型的数据的集合,可以是数字.字符串.数组.函数.对象…… 对象中的内容以键值对方式进行存储 对象要赋值给一个变量 var cat={ ...

  3. javascript 函数返回值(return)、定时器(setTimeout、setInterval)

    一.函数的返回值:return 1.函数名+括号=return后面的值 <script> function fn1(){ return 100; } alert(fn1()); // 10 ...

  4. for_each()的返回值

    有三种办法可以从“运用了function object”的算法中获取“结果”或“反馈”: 1.在外部持有状态,并让function object指向它: 2.以by reference方式传递func ...

  5. Python学习教程(learning Python)--2.3.4Python函数返回值

    本节讨论Python函数返回值问题. Python和C语言一样,也可以在函数结束时返回一个值.但在定义自己的Python函数时,是不需要指定返回值数据类型的,这和Python不关心变量的数据类型是一致 ...

  6. ActionResult的其它返回值

    我们上边所看到的Action都是return View();我们可以看作这个返回值用于解析一个aspx文件.而它的返回类型是ActionResult如 public ActionResult Inde ...

  7. Java学习笔记13---如何理解“子类重写父类方法时,返回值若为类类型,则必须与父类返回值类型相同或为其子类”

    子类重新实现父类的方法称重写:重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改:仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类:要么就不修改 ...

  8. laravel 返回值

    先理解几个概念: StdClass 对象 => 基础的对象 Eloquent 模型对象 (Model 对象) => 和模型相关的类对象 Eloquent 集合 => 可以简单理解为对 ...

  9. JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用

    “JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是 ...

  10. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

随机推荐

  1. 在void 中使用return的意思

    在定义的void函数里如果想要提前终止函数 格式为 return; 如果 在有返回值的函数中 格式为: return+值(0 -1 ......) 但如果在void 函数中写return 0 ; 则会 ...

  2. App复杂动画实现——Rive保姆级教程

    作者:京东物流 沈明亮 在App开发过程中,如果想实现动画效果,可以粗略分为两种方式.一种是直接用代码编写,像平移.旋转等简单的动画效果,都可以这么干,如果稍微复杂点,就会对开发工程师的数学功底.图形 ...

  3. Gusfield算法学习

    算法详解 等价流树正如其名,树上两点间的路径上的边权最小值为图上两点间的最小割. Gusfield算法就是建等价流树的一种算法.设当前正在处理的集合为 \(S(|S|\ge 2)\),从 \(S\) ...

  4. 2021-11-28:有一棵树,给定头节点h,和结构数组m,下标0弃而不用。 比如h = 1, m = [ [] , [2,3], [4], [5,6], [], [], []]

    2021-11-28:有一棵树,给定头节点h,和结构数组m,下标0弃而不用. 比如h = 1, m = [ [] , [2,3], [4], [5,6], [], [], []], 表示1的孩子是2. ...

  5. 2021-09-07:单词接龙 II。按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -

    2021-09-07:单词接龙 II.按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s ...

  6. 2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 输入:arr = [2,3,4,7,11], k = 5。 输出:9

    2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k . 请你找到这个数组里第 k 个缺失的正整数. 输入:arr = [2,3,4,7,11], k = 5. 输出:9 ...

  7. 从GFS到GPT,AI Infra的激荡20年

    ​导读 最近AIGC和LLM的浪潮层层迭起,大有把AI行业过去十年画的饼,一夜之间完全变现的势头.而 AI Infra (构建AI所需的基础设施),也成了讨论的焦点之一.大众对AI Infra的关注点 ...

  8. React Native项目设置路径别名

    没有设置路径别名之前代码是这样的: import { px2dp } from '../../utils/screenKits'; 路径相当冗长,看着就头疼.增加了路径别名之后,变成这样 import ...

  9. 2013年蓝桥杯C/C++大学A组省赛真题(振兴中华)

    题目描述: 小明参加了学校的趣味运动会,其中的一个项目是:跳格子. 地上画着一些格子,每个格子里写一个字,如下所示: 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛时,先站在左上角的写着&quo ...

  10. 警惕看不见的重试机制:为什么使用RPC必须考虑幂等性

    0 文章概述 在RPC场景中因为重试或者没有实现幂等机制而导致的重复数据问题,必须引起大家重视,有可能会造成例如一次购买创建多笔订单,一条通知信息被发送多次等问题,这是技术人员必须面对和解决的问题. ...