3.2 Go 返回值详解

在 Go 语言中,函数调用完成后会产生一个返回值,该值的类型和数量取决于函数定义。返回值在函数调用结束时通过 return 语句返回,具体规则如下:

一. 返回值的基本规则

1.返回值类型

  • 返回值必须有类型,类型可以是内置类型(如 int、string)或自定义类型。
  • 返回值本质上是函数中的局部变量,生命周期在函数执行结束后结束。

2.无返回值:

  • 函数可以没有返回值,此时 return 语句可选。
  • 示例:
func printMessage() {fmt.Println("Hello, Go!")return // 可省略
}

3.有返回值:

  • 有返回值的函数必须使用 return 语句,并提供返回值。
  • 示例:
func add(x, y int) int { // 返回值类型为 intreturn x + y         // 直接返回计算结果
}

4.匿名返回值的特点:

  • 简洁,但不明确标识返回值的用途。
  • 适合简单逻辑的函数。

注意事项

无返回值 func foo() {} 可省略或直接写 return 无法使用变量接收函数返回值

匿名返回值 func foo() int {} 必须写 return <值> 返回值由 return 明确提供

命名返回值(具名) func foo() (res int) {} return 可省略值,直接返回命名变量的当前值 返回值变量不可用 var 或 := 重新声明

多个返回值 func foo() (int, string) 返回值数量和顺序必须与定义一致 使用匿名或命名方式,根据需求灵活选择

命名返回值

1.单返回值

一旦一个函数有返回值,必须使用同样个数和类型变量接受

package mainimport "fmt"func f1(x int) (r int) { //r是当前f1函数的局部变量// r:=1024 //错误,r不能重复定义,因为在f1返回值中已经定义过r = x * 1024 //  重新给r进行赋值,使用参数计算返回值return       // 具名返回值时可以不带返回值变量的名称,Go自动匹配。等价于"return r"
}func main() {m1 := f1(10) //函数调用时,变量接收的个数和类型必须与函数返回值的个数和类型一致。fmt.Println(m1)
}

2.多返回值

package mainimport "fmt"// t2 返回两个整数 i 和 j 的值
func t2() (i, j int) {i, j = 4, 5return // 使用具名返回值直接返回
}func t1() (int, int) {return 1, 2 // 匿名返回值
}func main() {// 调用 t1 并输出返回值s1, s2 := t1()fmt.Println("t1 返回值:", s1, s2)// 调用 t2 并输出返回值s3, s4 := t2()fmt.Println("t2 返回值:", s3, s4)
}
package mainimport "fmt"func f2(a, b int) (result int, err error) { // result 和 err 是命名返回值if b == 0 {err = fmt.Errorf("f2 by zero")return}result = a / breturn // 隐式返回 result 和 err
}func main() {res, err := f2(10, 2) // 调用f2函数,将 a=10 和 b=2 作为参数传入。if err != nil {       // err 专门用来作为err处理错误返回值,如果 err 不等于 nil,则说明发生了错误。因为在 Go 中,错误是通过一个类型为 error 的值传递的,nil 表示没有错误。fmt.Println("Error:", err) //函数检测到错误,返回 res = 0 和错误 err = "f2 by zero"。} else {fmt.Println("Result:", res)  // 如果为 nil有错误,输出结果 Result: 5,a实参和b实参相除 a/b==5。}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCIE模式配置

对于VU系列FPGA&#xff0c;当DMA/Bridge Subsystem for PCI Express IP配置为Bridge模式时&#xff0c;等同于K7系列中的AXI Memory Mapped To PCI Express IP。

关注搜索引擎蜘蛛压力

以前在建站的时候&#xff0c;他们说蜘蛛来抓取的频率越多越好&#xff0c;因为蜘蛛来抓取说明了网站更新速度快&#xff0c;受搜索引擎的欢迎&#xff0c;但是在最近的网站统计中&#xff0c;发现很多蜘蛛爬取的频次非常的高&#xff0c;比如有的蜘蛛一天能来网站几万次&#…

【Uniapp-Vue3】request各种不同类型的参数详解

一、参数携带 我们调用该接口的时候需要传入type参数。 第一种 路径名称?参数名1参数值1&参数名2参数值2 第二种 uni.request({ url:"请求路径", data:{ 参数名:参数值 } }) 二、请求方式 常用的有get&#xff0c;post和put 三种&#xff0c;默认是get请求。…

4070s显卡部署Deepseek R1

电脑配置&#xff1a; 处理器&#xff1a;AMD 7950X 内存&#xff1a;32G 硬盘&#xff1a;致态tiplus7100 2t 显卡&#xff1a;4070 super 12G 部署方法&#xff1a; 1. 到ollama官网下载安装ollama https://ollama.com/https://ollama.com/https://ollama.com/https://…

工业相机 SDK 二次开发-Sherlock插件

本文介绍了 sherlock 连接相机时的插件使用。通过本套插件可连接海康的工业相机。 一&#xff0e;环境配置 1. 拷贝动态库 在用户安装 MVS 目录下按照如下路径 Development\ThirdPartyPlatformAdapter 找到目 录为 DalsaSherlock 的文件夹&#xff0c;根据 Sherlock 版本找到…

three.js+WebGL踩坑经验合集(4.1):THREE.Line2的射线检测问题(注意本篇说的是Line2,同样也不是阈值方面的问题)

上篇大家消化得如何了&#xff1f; 笔者说过&#xff0c;1级编号不同的两篇博文相对独立&#xff0c;所以这里笔者还是先给出完整代码&#xff0c;哪怕跟&#xff08;3&#xff09;没有太大区别。 这里我们把线的粗细调成5&#xff08;排除难选中的因素&#xff09;&#xff…

doris:JSON导入数据

本文介绍如何在 Doris 中导入 JSON 格式的数据文件。Doris 支持导入标准 JSON 格式数据&#xff0c;通过配置相关参数&#xff0c;可以灵活地处理不同的 JSON 数据结构&#xff0c;并支持从 JSON 数据中抽取字段、处理嵌套结构等场景。 导入方式​ 以下导入方式支持 JSON 格式…

信息收集 CTF 1 挑战通关指南

大家好&#xff01;今天我想和大家分享 Information Gathering CTF 1 挑战的完整攻略。我将解释我是如何逐步攻克每一个 flag&#xff0c;并使用了哪些工具。放心&#xff0c;我不会直接给出 flag&#xff0c;因为学习的目的不是直接提交答案&#xff0c;而是掌握解决问题的方法…

PHP防伪溯源一体化管理系统小程序

&#x1f50d; 防伪溯源一体化管理系统&#xff0c;品质之光&#xff0c;根源之锁 &#x1f680; 引领防伪技术革命&#xff0c;重塑品牌信任基石 我们自豪地站在防伪技术的前沿&#xff0c;为您呈现基于ThinkPHP和Uniapp精心锻造的多平台&#xff08;微信小程序、H5网页&…

使用MQTT.fx向阿里云物理网平台上报物理模型数据

MQTT向阿里云物理网平台上报物理模型数据 一、前言二、测试三、结束语 一、前言 上一篇文章介绍了阿里云物联网平台的基本使用&#xff08;文章入口&#xff09;&#xff0c;本篇博客接着来讲&#xff0c;主要介绍如何使用MQTT连接测试工具向阿里云物联网平台上报物理模型数据。…

【阅读笔记】基于图像灰度梯度最大值累加的清晰度评价算子

本文介绍的是一种新的清晰度评价算子&#xff0c;基于图像灰度梯度最大值累加 一、概述 目前在数字图像清晰度评价函数中常用的评价函数包括三类&#xff1a;灰度梯度评价函数、频域函数和统计学函数&#xff0c;其中灰度梯度评价函数具有计算简单&#xff0c;评价效果好等优…

数据库底层存储的基本逻辑

1. 数据库、表空间、磁盘是多对多的关系 一个表空间可以分散到多个磁盘上&#xff0c;一个磁盘上也可以有多个表空间&#xff1b; 一个数据库可以分散存储在多个磁盘上&#xff0c;一个磁盘也可以包含多个数据库。 2. 一个表只能属于一个库&#xff0c;也只能对应一个表空间…

80,【4】BUUCTF WEB [SUCTF 2018]MultiSQL

53&#xff0c;【3】BUUCTF WEB october 2019 Twice SQLinjection-CSDN博客 上面这个链接是我第一次接触二次注入 这道题也涉及了 对二次注入不熟悉的可以看看 BUUCTF出了点问题&#xff0c;打不开&#xff0c;以下面这两篇wp作为学习对象 [SUCTF 2018]MultiSQL-CSDN博客 …

docker-registry

安装依赖 apt install apache2-utils设置密码 htpasswd -Bbn 用户名 密码 >/data/registry_hub/passwd#docker私服部署 docker run -d -p 5000:5000 --name docker-registry -v /data/registry_hub/:/var/lib/registry -v /data/registry_hub/passwd:/auth/htpasswd \ -e …

领域驱动设计(DDD)Spring Boot 3 实现 二

使用 Spring Boot 3 实现领域驱动设计&#xff08;DDD&#xff09;是一种很自然的选择&#xff0c;因为 Spring 提供了良好的生态支持&#xff0c;特别是在分层架构、依赖管理、事件驱动等方面。以下是如何在 Spring Boot 3 中结合 DDD 进行开发的详细指南&#xff1a; 项目结构…

FFmpeg 头文件完美翻译之 libavcodec 模块

前言 众所周知&#xff0c;FFmpeg 的代码开发上手难度较高&#xff0c;源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发&#xff0c;需要借助它的头文件&#xff0c;FFmpeg 把很多代码库教程都写在头文件里面。因此&#xff0c;熟读头文件的内…

redis实现lamp架构缓存

redis服务器环境下mysql实现lamp架构缓存 ip角色环境192.168.242.49缓存服务器Redis2.2.7192.168.242.50mysql服务器mysql192.168.242.51web端php ***默认已安装好redis&#xff0c;mysql 三台服务器时间同步&#xff08;非常重要&#xff09; # 下载ntpdate yum -y install…

flink写parquet解决timestamp时间格式字段问题

背景 Apache Parquet 是一种开源的列式数据文件格式,旨在实现高效的数据存储和检索。它提供高性能压缩和编码方案(encoding schemes)来批量处理复杂数据,并且受到许多编程语言和分析工具的支持。 在我们通过flink写入parquet文件的时候,会遇到timestamp时间格式写入的问题。…

PaddleSeg 从配置文件和模型 URL 自动化运行预测任务

git clone https://github.com/PaddlePaddle/PaddleSeg.git# 在ipynb里面运行 cd PaddleSegimport sys sys.path.append(/home/aistudio/work/PaddleSeg)import os# 配置文件夹路径 folder_path "/home/aistudio/work/PaddleSeg/configs"# 遍历文件夹&#xff0c;寻…

ESMC-600M蛋白质语言模型本地部署攻略

前言 之前介绍了ESMC-6B模型的网络接口调用方法&#xff0c;但申请token比较慢&#xff0c;有网友问能不能出一个本地部署ESMC小模型的攻略&#xff0c;遂有本文。 其实本地部署并不复杂&#xff0c;官方github上面也比较清楚了。 操作过程 环境配置&#xff1a;CUDA 12.1、…