Go 快速入门指南 - 函数
2022/12/28 4:24:02
本文主要是介绍Go 快速入门指南 - 函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述
函数
是将一个或者一类问题包装为一个代码块,可以被多次调用,提高代码重用性。
Go 函数中声明、定义、参数、返回值这些基础概念,和其他编程语言中的一致,这里不再赘述。
语法规则
Go 函数支持单个返回值和多个返回值。
# 单个返回值 # 参数可省略 func 函数名称(参数 1 值 参数 1 类型, 参数 2 值 参数 2 类型 ...) 返回值类型 { // do something } # 多个返回值,不指定名称 # 参数可省略 func 函数名称(参数 1 值 参数 1 类型, 参数 2 值 参数 2 类型 ...) (返回值 1 类型, 返回值 2 类型) { // do something } # 多个返回值,指定名称 # 参数可省略 func 函数名称(参数 1 值 参数 1 类型, 参数 2 值 参数 2 类型 ...) (返回值 1 名称 返回值 1 类型, 返回值 2 名称 返回值 2 类型) { // do something }
例子
单个返回值
package main import "fmt" func max(x, y int) int { if x > y { return x } else { return y } } func main() { fmt.Printf("max = %d\n", max(1, 2)) } // $ go run main.go // 输出如下 /** max = 2 */
多个返回值,不指定名称
package main import "fmt" func getNumbers() (int, int, int) { return 1, 2, 3 } func main() { x, y, z := getNumbers() fmt.Printf("x = %d, y = %d, z = %d\n", x, y, z) } // $ go run main.go // 输出如下 /** x = 1, y = 2, z = 3 */
多个返回值,指定名称
package main import "fmt" func getNumbers() (x int, y float64, z string) { x = 1024 y = 3.14 z = "hello world" return } func main() { x, y, z := getNumbers() fmt.Printf("x = %d, y = %.2f, z = %s\n", x, y, z) } // $ go run main.go // 输出如下 /** x = 1024, y = 3.14, z = hello world */
参数/返回值 类型相同简化
-
• 当参数类型相同时,可以将类型放在最后一个参数变量后面
-
• 当返回值类型相同时,可以将类型放在最后一个返回值变量后面
package mainimport "fmt"func getMaxAndMin(x, y, z int) (max, min int) { if x > y { max = x min = y if x < z { max = z } else if z < y { min = z } } else { max = y min = x if y < z { max = z } else if z < x { min = x } } return}func main() { max, min := getMaxAndMin(100, 200, 300) fmt.Printf("max = %d, min = %d\n", max, min)}// $ go run main.go// 输出如下 /** max = 300, min = 100 */
递归函数
经典语录: 要想理解递归,首先要理解递归。
例子
阶乘
package main import "fmt" func factorial(n int) int { if n == 0 { return 1 } return n * factorial(n-1) } func main() { fmt.Printf("1 * 2 * 3 * 4 * 5 = %d\n", factorial(5)) } // $ go run main.go // 输出如下 /** 1 * 2 * 3 * 4 * 5 = 120 */
闭包函数
闭包的概念参考扩展阅读-3。
例子
自增序列号生成器
package main import "fmt" // 自增序列号生成器 func incSeq() func() int { i := 0 return func() int { i++ return i } } func main() { next := incSeq() fmt.Printf("初始值 = %d\n", next()) for i := 1; i <= 5; i++ { fmt.Printf("第 %d 次迭代后, 值 = %d\n", i, next()) } } // $ go run main.go // 输出如下 /** 初始值 = 1 第 1 次迭代后, 值 = 2 第 2 次迭代后, 值 = 3 第 3 次迭代后, 值 = 4 第 4 次迭代后, 值 = 5 第 5 次迭代后, 值 = 6 */
内部函数
使用的场景:在函数内部有很多重复性代码并且严重依赖上下文变量。此时可以在函数内部声明一个函数,专门用来处理重复性的代码。
例子
内部求和函数
package main import "fmt" func main() { var sum func(...int) int // 声明 sum 函数 sum = func(numbers ...int) int { // 定义 sum 函数 total := 0 for _, num := range numbers { total += num } return total } fmt.Printf("1 + 2 + 3 = %d\n", sum(1, 2, 3)) } // $ go run main.go // 输出如下 /** 1 + 2 + 3 = 6 */
这篇关于Go 快速入门指南 - 函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站