package main import "fmt" // 对两个数字进行加减乘除运算,并返回对应的运算结果(即和差积商四个值) // 重要说明:calc()后面的内容是该函数的返回值列表,返回值类型前面若有变量名则为命名返回值,否则为匿名返回值。 func calc(num1 int, num2 int) (add int, subtract int, multiply int, divide int) { add = num1 + num2 // 加(和) subtract = num1 - num2 // 减(差) multiply = num1 * num2 // 乘(积) divide = num1 / num2 // 除(商) // 重要提醒1:由于函数使用了命名返回值,所以return后面可以没有任何内容,但实际上返回了4个值,分别对应返回值列表4个变量。 // 重要提醒2:使用了命名返回值仍然可以用“return add, subtract, multiply, divide”的方式返回,并且以执行return时的值为准, // 即如果返回“return 1, 2, 3, 4”那么返回值就是1, 2, 3, 4,而不是“add, subtract, multiply, divide”变量的值。 return } // 不定参数(个数和类型均不定)的自定义函数 func info(args ...any) { // 遍历所有参数 for i, arg := range args { // 判断参数的数据类型 argType := "unknown" switch arg.(type) { case string: argType = "string" case int: argType = "int" case float64: argType = "float64" default: argType = "unknown" } fmt.Printf("第%+v个参数(%+v):%+v \n", i+1, argType, arg) } } func main() { // 使用result1、result2、result3、result4分别接收calc()函数的四个返回值 result1, result2, result3, result4 := calc(10, 2) fmt.Printf("和 = %+v \n", result1) // 和 = 12 fmt.Printf("差 = %+v \n", result2) // 差 = 8 fmt.Printf("积 = %+v \n", result3) // 积 = 20 fmt.Printf("商 = %+v \n", result4) // 商 = 5 name := "张三" age := 18 gender := "男" weight := 66.5 info(name, age, gender, weight) // 第1个参数(string):张三 // 第2个参数(int):18 // 第3个参数(string):男 // 第4个参数(float64):66.5 } //========== 总结 ==========// // 1、匿名返回值和命名返回值并没有绝对的孰优孰劣,两者在不同场景下各有优缺点,建议项目统一只使用其中一种,不要这个函数用匿 // 名返回值,下一个函数又用命名返回值,一般建议统一使用命名返回值。 // 2、命名返回值实际上是声明了一个变量但未初始化,所以需要注意其零值问题,即返回值变量没有进行过任何修改就直接返回了,如果 // 是map等类型,那么返回的就是nil,这时调用方使用返回值就可能出问题,所以强烈建议对返回值变量进行初始化操作。 // 3、Go语言不支持设置参数缺省值。
Copyright © 2024 码农人生. All Rights Reserved