1、概述

在Go语言中,函数可以有命名返回值和普通(匿名)返回值。命名返回值会被视为定义在函数顶部的变量,并且在使用 return 语句返回时,不再必须在其后面指定参数名,也就是支持“裸”返回;而使用普通返回值时,使用 return 语句返回时,需要在其后面指定与普通返回值相同类型的参数名。

实际上,命名返回值和普通返回值都有其适用的场景,本文我们介绍 Golang 语言函数或方法使用命名返回值和普通返回值各自的“好处”与“坏处”。

2、命名返回值

使用命名返回值的“好处”是可以提升代码可读性,读者朋友们试想一下,当函数或方法有多个返回值时,尤其是函数体中代码比较长的函数或方法,如果我们使用普通返回值,那么我们想要知道返回值的含义,就需要先阅读函数体中完整代码。
而如果使用具有实际含义的命名返回值,我们只需要阅读函数或方法的签名,就可以知道其含义,甚至可以把它们作为文档使用。
但是,命名返回值也不是没有“坏处”,如果函数体内有变量与命名返回值同名,那么命名返回值会被覆盖,所以我们也需要注意避免“踩坑”。

3、普通返回值

普通(匿名)返回值的“好处”是简洁,当我们写一些简短函数或方法时,使用普通返回值可以使代码更加简洁,在 Golang 语言官方标准库中,有很多使用普通返回值的函数或方法。

func add(a, b int) int {
return a + b
}

但是如果返回值是指针类型时,使用普通返回值,就会使我们函数体中的代码变得不优雅,比如以下这段示例代码。

func c() *int {
i := 0
return &i
}

当然这里列举的代码片段是个极端示例,我们在编写 Golang 代码时,也并不会这么使用。还有就是在编写函数体代码比较长的函数时,使用普通返回值的代码,其可读性比不上使用命名返回值的代码。

4、总结

在Go语言中,推荐使用命名返回值(named return values)而不是普通返回值(unnamed return values),因为使用命名返回值可以提供一些优势:

  1. 可读性和可维护性:命名返回值可以让函数的返回值更加清晰和自文档化,因为你可以为返回值命名,使得在函数签名中可以看到每个返回值的含义,这有助于提高代码的可读性和可维护性。

  2. 默认值:命名返回值在函数开始时会被自动初始化为其类型的零值。这可以减少在函数中显式初始化返回值的需要,提高代码的简洁性。

  3. 减少错误:使用命名返回值可以减少返回值的顺序错误。如果一个函数有多个返回值,并且它们没有命名,那么容易在返回值的顺序上出现错误。而使用命名返回值,你可以直接通过名称引用它们,不容易出错。

尽管使用命名返回值具有上述优势,但在某些情况下,使用普通返回值可能更合适。例如,当函数只有一个返回值,并且返回值的含义非常明确时,使用普通返回值可能更简单和清晰。此外,如果你希望在函数体内的不同位置多次使用相同的返回值变量,普通返回值可能更合适。

总的来说,Go语言鼓励使用命名返回值,因为它可以提高代码的可读性、可维护性,并减少潜在的错误。但在一些简单的情况下,普通返回值也可以使用。选择哪种方式应根据具体的情况和代码的清晰度来决定。

参考:Golang 语言该用命名返回值吗?

Golang 命名返回值和普通返回值的更多相关文章

  1. SSM获取表单数据插入数据库并返回插入记录的ID值

    以下指示插入操作以及获取记录值的ID的部分操作代码!!! 首先是简单的表单实现 <%@ page language="java" contentType="text ...

  2. C语言 realloc为什么要有返回值,realloc返回值具体解释/(解决随意长度字符串输入问题)。

    在C语言操作中会用到大量的内存操作,当中非经常常使用的一个是realloc(). 由字面意思能够知道,该函数的作用是用于又一次分配内存. 使用方式例如以下: NewPtr=(数据类型*)realloc ...

  3. mybatis与mysql插入时返回主键id的值

    <insert id="insertCharge" parameterType="com.bb.bean.Rechargerecord"> < ...

  4. Python3基础 Python的函数都有返回值 无指定返回值的函数 返回NONE对象

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  5. 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。

    /** 转换成XML格式字符串 **/ public static String doXMLStr(Map<String, String> map) { StringBuffer xml_ ...

  6. 根据条件返回相应值 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

    decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) [功能]根据条件返回相应值 [参数]c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或null 注 ...

  7. 微信小程序——picker通过value返回你想获取的值

    关于微信小程序中的picker使用方法可以访问:picker-小程序 从它的官方文档中,可以看出它返回的value值是它range的下标: 在项目中,我们大多数时候传的值并不是需要这个下标,而是其他的 ...

  8. 7 -- Spring的基本用法 -- 10... 获取其他Bean的属性值;获取Field值;获取任意方法的返回值

    7.10 高级依赖关系配置 组件与组件之间的耦合,采用依赖注入管理:但基本类型的成员变量值,应直接在代码中设置. Spring支持将任意方法的返回值.类或对象的Field值.其他Bean的getter ...

  9. js valueOf()函数用于返回指定对象的原始值

    valueOf()函数用于返回指定对象的原始值. 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法. 对象 返回 ...

  10. SpringMVC返回结果值处理器之返回一个值

    处理器一共分为两类: 一类是返回到一个页面,凡是返回页面的处理器,一定会刷新页面,对应的请求应该是同步请求. 一类是返回结果,凡是返回结果的处理器,一定是请求方需要得到这个结果值,此时就需要一个有回调 ...

随机推荐

  1. tiptopGP5.2链接所有表或报不存在函数处理

    修改交易的表时需要特别注意,改完要关联所有有关的表r.rb.rb pja_file 当链接提示不存在的函数调用,又无法确定具体是那个关联程序时, 可以在本函数内先定义这个报错的函数,重新链接时,系统会 ...

  2. install_failed_uid_changed no root 没有root手机

    主页 问题 Installation error: INSTALL_FAILED_UID_CHANGED no root Installation error: INSTALL_FAILED_UID_ ...

  3. 01-linux - kvm

    配置linux kvm 逻辑卷 # df -h # fdisk -l | grep dev # pvs # pvcreate /dev/sdg # pvs # vgcreate oradata /de ...

  4. Maze 1D 题解

    题目大意 在数轴上给定一串行动指令,类型有两种:向左移动一个单位 / 向右移动一个单位.要求最后一步到达一个没有到达过的位置.可以在数轴上放置若干个障碍物阻碍移动,问在放置的障碍物最少的情况下有多少放 ...

  5. Ubuntu18虚拟机远程开发

    Ubuntu18 虚拟机远程开发 1. 安装 VMware 和 Ubuntu18 虚拟机 (1)VMware 官网上下载免费版本 一路 next 安装就行(中间也许需要改一下存放路径) (2)Ubun ...

  6. MIT实验警示:人类或需要人工智能辅助才能理解复杂逻辑

    麻省理工实验揭示人类的天赋缺陷 麻省理工学院林肯实验室(MIT Lincoln Laboratory)的一项研究表明,尽管形式规范具有数学上的精确性,但人类并不一定能对其进行解释.换句话说就是,人类在 ...

  7. Spring Boot Bean的多种加载方式

    在 Spring Boot 中,您可以以多种方式加载 Bean,这取决于项目的需求和设计.以下是一些常见的加载 Bean 的方式以及相应的示例源代码. 1.组件扫描(Component Scannin ...

  8. 数据分析工具 Datainside、Power BI、帆软(FineReport)怎么选?

    Datainside.Power BI和帆软(FineReport)都是数据分析领域常用的工具,它们各自有不同的特点和适用场景.下面将会详细介绍每个工具的功能和优势,以便您进行选择. Datainsi ...

  9. 0x03.api接口

    API接口安全 HTTP类接口 SOAP----->http+xml REST------>传递资源 RPC类接口(非web):用于远程调用,类似于客户端和服务端.如,登录的时候,进入服务 ...

  10. Linux笔记03: Linux常用命令_3.1命令的基本格式

    3.1命令的基本格式 3.1.1 命令提示符 [root@localhost ~]# 这就是Linux系统的命令提示符.各部分含义如下: ●[]:这是提示符的分隔符号,没有特殊含义. ●root:显示 ...