3.2 Go 返回值详解

news/2025/1/24 17:49:51/

在 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.ppmy.cn/news/1565837.html

相关文章

云计算中的微服务架构是什么

云计算中的微服务架构是什么 从巨石到微服务&#xff1a;一场架构革命 还记得早期软件开发吗&#xff1f;一个庞大的单体应用&#xff0c;就像一个臃肿的巨人&#xff0c;笨重且脆弱。微服务就是这个巨人的解体与重生。 想象一下&#xff0c;你正在搭建一个电商平台。过去&a…

CentOS7使用源码安装PHP8教程整理

CentOS7使用源码安装PHP8教程整理 下载安装包解压下载的php tar源码包安装所需的一些依赖扩展库安装前的配置修改配置文件1、进入php8的安装包 配置环境变量开机自启启动服务创建软连接常见问题1、checking for icu-uc > 50.1 icu-io icu-i18n... no2、configure: error: Pa…

DBSyncer开源数据同步中间件

一、简介 DBSyncer(英[dbsɪŋkɜː(r)]&#xff0c;美[dbsɪŋkɜː(r) 简称dbs)是一款开源的数据同步中间件&#xff0c;提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务&#xff0c;提供监控全量…

【MySQL】 常见数据类型

MySQL常见数据类型 1.整数类型2.浮点数类型3.定点数类型4.bit类型5.字符串类型 5.1char和varchar类型5.2日期类型和时间类型5.3enum和set类型 1.整数类型 整数类型默认都是有符号整数 类型名称 字节数 类型说明 tinyint 1 带符号的范围-128127&#xff0c;无符号范围…

第三章 C 开头的术语

文章目录 第三章 C 开头的术语以 C 开头的术语CLASSPATH计算属性 (calculated property)调用方法 (call method)Callin 接口 (callin interface)回调方法 (callback method)标准形式 (canonical form)级联点语法 (cascading dot syntax)字符集 (character set)字符流 (characte…

MarsCode青训营打卡Day10(2025年1月23日)|稀土掘金-147.寻找独一无二的糖葫芦串、119.游戏队友搜索

资源引用&#xff1a; 147.寻找独一无二的糖葫芦串 119.游戏队友搜索 今日小记&#xff1a; 回乡聚会陪家人&#xff0c;休息一天~ 稀土掘金-147.寻找独一无二的糖葫芦串&#xff08;147.寻找独一无二的糖葫芦串&#xff09; 题目分析&#xff1a; 给定n个长度为m的字符串表…

OpenCV边沿检测(Python版)

边缘检测是图像处理中的一项重要任务&#xff0c;用于找到图像中的边界或边缘。它在计算机视觉、图像处理和模式识别等领域中具有广泛的应用。 边缘可以被定义为图像亮度、颜色或纹理的突变区域。边缘检测算法旨在识别这些变化并将其标记为边缘。边缘检测可以用于分割图像、检测…

Android系统开发(十九):无缝拉伸的艺术——9-Patch 可绘制对象详解

引言 在移动开发中&#xff0c;背景、标题以及其他界面元素的设计质量直接影响用户体验。然而&#xff0c;如何让图片适应不同分辨率设备&#xff0c;成为开发者常常头疼的问题。这时&#xff0c;9-Patch 闪亮登场&#xff01;它不仅可以无缝拉伸&#xff0c;还能保持视觉效果…