Golang 命名返回值和普通返回值
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),因为使用命名返回值可以提供一些优势:
可读性和可维护性:命名返回值可以让函数的返回值更加清晰和自文档化,因为你可以为返回值命名,使得在函数签名中可以看到每个返回值的含义,这有助于提高代码的可读性和可维护性。
默认值:命名返回值在函数开始时会被自动初始化为其类型的零值。这可以减少在函数中显式初始化返回值的需要,提高代码的简洁性。
减少错误:使用命名返回值可以减少返回值的顺序错误。如果一个函数有多个返回值,并且它们没有命名,那么容易在返回值的顺序上出现错误。而使用命名返回值,你可以直接通过名称引用它们,不容易出错。
尽管使用命名返回值具有上述优势,但在某些情况下,使用普通返回值可能更合适。例如,当函数只有一个返回值,并且返回值的含义非常明确时,使用普通返回值可能更简单和清晰。此外,如果你希望在函数体内的不同位置多次使用相同的返回值变量,普通返回值可能更合适。
总的来说,Go语言鼓励使用命名返回值,因为它可以提高代码的可读性、可维护性,并减少潜在的错误。但在一些简单的情况下,普通返回值也可以使用。选择哪种方式应根据具体的情况和代码的清晰度来决定。
Golang 命名返回值和普通返回值的更多相关文章
- SSM获取表单数据插入数据库并返回插入记录的ID值
以下指示插入操作以及获取记录值的ID的部分操作代码!!! 首先是简单的表单实现 <%@ page language="java" contentType="text ...
- C语言 realloc为什么要有返回值,realloc返回值具体解释/(解决随意长度字符串输入问题)。
在C语言操作中会用到大量的内存操作,当中非经常常使用的一个是realloc(). 由字面意思能够知道,该函数的作用是用于又一次分配内存. 使用方式例如以下: NewPtr=(数据类型*)realloc ...
- mybatis与mysql插入时返回主键id的值
<insert id="insertCharge" parameterType="com.bb.bean.Rechargerecord"> < ...
- Python3基础 Python的函数都有返回值 无指定返回值的函数 返回NONE对象
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。
/** 转换成XML格式字符串 **/ public static String doXMLStr(Map<String, String> map) { StringBuffer xml_ ...
- 根据条件返回相应值 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) [功能]根据条件返回相应值 [参数]c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或null 注 ...
- 微信小程序——picker通过value返回你想获取的值
关于微信小程序中的picker使用方法可以访问:picker-小程序 从它的官方文档中,可以看出它返回的value值是它range的下标: 在项目中,我们大多数时候传的值并不是需要这个下标,而是其他的 ...
- 7 -- Spring的基本用法 -- 10... 获取其他Bean的属性值;获取Field值;获取任意方法的返回值
7.10 高级依赖关系配置 组件与组件之间的耦合,采用依赖注入管理:但基本类型的成员变量值,应直接在代码中设置. Spring支持将任意方法的返回值.类或对象的Field值.其他Bean的getter ...
- js valueOf()函数用于返回指定对象的原始值
valueOf()函数用于返回指定对象的原始值. 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法. 对象 返回 ...
- SpringMVC返回结果值处理器之返回一个值
处理器一共分为两类: 一类是返回到一个页面,凡是返回页面的处理器,一定会刷新页面,对应的请求应该是同步请求. 一类是返回结果,凡是返回结果的处理器,一定是请求方需要得到这个结果值,此时就需要一个有回调 ...
随机推荐
- 聊聊基于Alink库的随机森林模型
概述 随机森林(Random Forest)是一种集成学习(Ensemble Learning)方法,通过构建多个决策树并汇总其预测结果来完成分类或回归任务.每棵决策树的构建过程中都引入了随机性,包括 ...
- The method dismissDialog(int) from the type Activity is deprecated
The method showDialog(int) from the type Activity is deprecated in android? up vote6down votefavor ...
- 入门篇-其之五-Java运算符(上)
一元运算符之正负号 Java支持多种一元运算符,一元运算符中的"一元"是指一个操作数.我们初中学过的正负号就属于一元运算符,因为正负号后面只有一个数字. 正数使用+表示,其中+可以 ...
- client-go实战之八:更新资源时的冲突错误处理
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<client-go实战> ...
- iframe用的场景
iframe可用在以下几个场景中: 1:典型系统结构,左侧是功能树,右侧就是一些常见的table或者表单之类的.为了每一个功能,单独分离出来,采用iframe. 2:ajax上传文件. 3:加载别的网 ...
- splay + 垃圾回收 知识点与例题的简要讲解
splay 简要讲解 前置芝士:普通二叉树 splay tree是一个越处理越灵活的数据结构,通过splay(伸展)操作,使整棵树的单次查询时间复杂度接近于O(log n),整棵树的高度也接近于log ...
- 立方骑士(lgP7354)
来水篇题解((( 图炸了,去洛谷博客看吧. 注:在本篇题解中, \(K\) 表示国王, \(N\) 表示骑士,不同颜色的 \(X\) 表示该位置国王可以达到,且被与之相同颜色的骑士封锁.方法不唯一,图 ...
- 设置Eclipse自动补全变量名
具体配置步骤如下: Windows -> Preferences -> Java -> Editor -> Content Assist 选中 Enable auto-acti ...
- JUC并发编程学习笔记(十二)Stream流式计算
Stream流式计算 什么是Stream流式计算 大数据:存储+计算 集合.MySql这些的本质都是存储东西的: 计算都应该交给流来操作! 一个案例说明:函数式接口.lambda表达式.链式编程.St ...
- Golang面试题从浅入深高频必刷「2023版」
大家好,我是阳哥.专注Go语言的学习经验分享和就业辅导. Go语言特点 Go语言相比C++/Java等语言是优雅且简洁的,是我最喜爱的编程语言之一,它既保留了C++的高性能,又可以像Java,Pyth ...