自定义函数

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