大学网 > php中文网 > 后端开发Golang 可变参数列表的使用场景有哪些?正文

Golang 可变参数列表的使用场景有哪些?

中国大学网 2024-10-17

可变参数列表用于接受任意数量的参数。应用场景包括:连接多个切片、创建函数指针切片、忽略某些参数以及接收未知数量的参数。

Go 中可变参数列表的应用场景

可变参数列表,又称变长参数或不定参数,允许函数接受任意数量的参数。在 Go 中,它们使用 ... 运算符表示。

使用场景:

立即学习“go语言免费学习笔记(深入)”;

1. 连接多个切片

func concat(slices ...[]int) []int {
    // 创建一个新的切片,用于存储连接后的结果
    result := make([]int, 0)

    // 遍历每个参数切片并将其附加到结果切片
    for _, slice := range slices {
        result = append(result, slice...)
    }

    return result
}

func main() {
    a := []int{1, 2, 3}
    b := []int{4, 5, 6}
    c := concat(a, b)
    fmt.Println(c) // 输出: [1 2 3 4 5 6]
}

2. 创建函数指针切片

func createFunctionPointers(f ...func()) []func() {
    // 创建一个空函数指针切片
    pointers := make([]func(), 0)

    // 遍历每个参数函数并将其添加到切片中
    for _, fn := range f {
        pointers = append(pointers, fn)
    }

    return pointers
}

func main() {
    f1 := func() { fmt.Println("函数 1 被调用") }
    f2 := func() { fmt.Println("函数 2 被调用") }

    // 创建函数指针切片
    ptrs := createFunctionPointers(f1, f2)

    // 循环执行函数指针
    for _, ptr := range ptrs {
        ptr()  // 输出:"函数 1 被调用"、"函数 2 被调用"
    }
}

3. 忽略某些参数

func sum(a int, b int, rest ...int) int {
    // 遍历剩余参数并将其相加
    total := 0
    for _, num := range rest {
        total += num
    }

    return a + b + total
}

func main() {
    // 忽略第三个参数
    result := sum(1, 2, 4, 5, 6)
    fmt.Println(result) // 输出: 12
}

4. 接收未知数量的参数

func printValues(message string, values ...interface{}) {
    fmt.Printf(message, values...)
}

func main() {
    printValues("年龄:%d,姓名:%s", 30, "John") // 输出:"年龄:30,姓名:John"
}

以上就是Golang 可变参数列表的使用场景有哪些?的详细内容,更多请关注中国大学网其它相关文章!