3.3 Go函数可变参数

可变参数(variadic parameters)是一种允许函数接受任意数量参数的机制。它在函数定义中使用 ...type 来声明参数类型,所有传递的参数会被收集为一个切片,函数内部可以像操作普通切片一样处理这些参数。

package main

import "fmt"

func t1(ints ...int) { //可变参数使用方法

}

/*
func t2(ints ...int,s string ,i int) int { // 错误,... 可变参数必须在最后一个位置上
}

func t3(ints ...int,strings ...string)  { // 错误,... 可变参数必须在最后一个位置上,可变参数在形参列表中只能出现一次,不可以同时出现两个可变参数

}
func t4(x,y int, z sting, ints ...int ){ //正确,可变参数可以与普通参数混合使用,符合可变参数使用方法
}
*/
func t5(x, y int, ints ...int) {
    fmt.Printf("x: %d, y: %d\n", x, y)
    fmt.Printf("ints (type: %T): %v, length: %d, capacity: %d\n", ints, ints, len(ints), cap(ints))
}

func main() {
    fmt.Println("\nDemonstrating t5:")
    t5(10, 20, 30, 40, 50) // 调用 t5,传递普通参数和可变参数

    fmt.Println("\nDemonstrating t5 with no variadic arguments:")
    t5(10, 20) // 调用 t5,不传递可变参数

}

可变参数切片传递

func t8(x, y int, ints ...int) {
// 按位置传参
		//首先要满足位置参数的对应,剩余ints收集、ints将新建一个全新的切片
		普通参数按位置
	}
*/
}

func main (){
    
t8(1, 2, 3) //按照位置进行赋值,变长
f8 := []int{1, 2, 3, 4} // 定义切片,将数据存放在切片中
t8(1, 2, f8...) //f8... 方式实际上是没有心切片的创建。f8...只能用在可变参数中。

    }

日志记录函数通常需要接受多个参数来拼接日志内容。例如:



func logMessage(level string, messages ...string) {
    fmt.Printf("[%s] ", level)
    for _, msg := range messages {
        fmt.Print(msg, " ")
    }
    fmt.Println()
}

func main() {
    logMessage("INFO", "System started", "PID:", "12345")
    logMessage("ERROR", "Disk space is low")
}

你可能感兴趣的:(Golang,golang,开发语言)