美文网首页
Golang学习笔记-1.13 可变参数函数

Golang学习笔记-1.13 可变参数函数

作者: xunk1900 | 来源:发表于2018-07-26 23:51 被阅读0次

本文系第十三篇Golang语言学习教程

可变参数函数


参数数量可变的函数,称为可变参数函数。
最典型的例子就是fmt.Printf和类似的函数。Print首先接受一个必备的参数,之后接收任意个数的后续参数。

语法


如果函数的最后一个参数被记作...T,那么函数可以接受任意个T类型的参数作为最后一个参数。

声明可变函数


func sum(vals...int) int {  //定义函数sum,vals被看作[]int类型的切片,sum可以接受任意数量的int类型参数
    total := 0
    for _, val := range vals{  //循环 vals 的值
        total += val  //将所有val加起来
    }
    return total  //返回任意个int型参数的和
}

以上程序中,sum函数返回任意个int型参数的vals被看作[]int类型的切片,sum接收任意数量的int型参数。

func main (){
    fmt.Println(sum(1, 3, 5, 7))  // "16"
    fmt.Println(sum(1, 1, 1))     // "3"
    fmt.Println(sum())            // "0"
}

以上程序调用sum函数计算输入值得和。

来写一个在输入整数列表中查看某个整数是否存在的程序:

package main

import "fmt"

func find(num int, nums...int) {  //定义函数find, 接受任意数量的int型参数
    found := false  //首先定义 found 为错
    for i, v := range nums {  //循环 nums 的值
        if v == num {  
            fmt.Println(num, "found at index", i, "in", nums)
            found = true
        }  //如果循环到的值等于 num 参数,则输出位置,并且将found 置为true
    }
    if !found {   
        fmt.Println(num, "is not in", nums)
    }    //如果found 没有被置为true,则表明没有找到, 输出没有找到
}

func main (){
    find(12, 5, 6, 12, 8, 9)
    find(4, 5, 6)
    find(67)
}

在以上程序中,find函数接收任意数量的int型参数。
可变参数函数的工作原理是将可变参数转换为一个新的切片,这是至关重要的。

在以上程序倒数第四行,find函数中可变参数是5, 6, 12, 8, 9,find 函数接收一个类型为int的可变参数。所以这五个参数被编译器转换为一个int类型切片 int []int{5, 6, 12, 8, 9},然后被传入find函数中。

for循环遍历nums切片,如果num在切片中,则输出num位置,如果不在则提示未找到。
以上代码的输出结果为:

12 found at index 2 in [5 6 12 8 9]
4 is not in [5 6]
67 is not in []

find函数仅有一个参数也是合法的,这样的情况下切片nums是一个长度和容量都为0的nil切片。

给可变参数传入切片

之前说可变参数函数的工作原理是将可变参数转换为一个新的切片,那么以正常方式将切片传入可变参数:

    numbers := []int{5, 6, 7, 8}
    find(7, numbers)

find函数规定,find(num int, nums...int),传入的可变参数只能是int类型的参数,所以直接将一个切片传入会报错cannot use numbers (type []int) as type int in argument to find

只需要在最后一个参数后加上省略符,就可以将切片传给find函数:

package main

import "fmt"

func find(num int, nums...int) {  //定义函数find, 接受任意数量的int型参数
    found := false  //首先定义 found 为错
    for i, v := range nums {  //循环 nums 的值
        if v == num {  
            fmt.Println(num, "found at index", i, "in", nums)
            found = true
        }  //如果循环到的值等于 num 参数,则输出位置,并且将found 置为true
    }
    if !found {   
        fmt.Println(num, "is not in", nums)
    }    //如果found 没有被置为true,则表明没有找到, 输出没有找到
}

func main (){
    numbers := []int{5, 6, 7, 8}
    find(7, numbers...)
}

以上为学习Golang 可变函数

相关文章

  • Golang学习笔记-1.13 可变参数函数

    本文系第十三篇Golang语言学习教程 可变参数函数 参数数量可变的函数,称为可变参数函数。最典型的例子就是fmt...

  • Golang 系列教程 第 12 部分,可变参数函数

    欢迎来到 Golang 系列教程 第 12 部分 什么是可变参数函数 可变参数函数是一种参数个数可变的函数。 语法...

  • Go教程第九篇:可变参数函数

    可变参数函数 欢迎来到《Golang系列教程》的第九篇文章---可变参数函数。 什么是可变参数函数 ? 通常情况下...

  • golang学习笔记之-函数可变参数

    语法 注意点: 如果函数的参数是可变参数,同时还有其他的参数。可变参数要放在形参列表的最后 一个函数的参数列表中,...

  • 12. 可变参数函数

    12. 可变参数函数 什么是可变参数函数 可变参数函数是一种参数个数可变的函数。 语法 如果函数最后一个参数被记作...

  • ★10.关于可变参数模板

    可变参数函数模板 可变参数类模板 可变参数函数模板的使用 转发参数包

  • python 函数的可变参数

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 可变参数 在Python函数中,还可以定义可变参...

  • Go语言可变参数

    可变参数 参数数量可变的函数称为可变参数函数 在声明可变参数函数时,需要在参数列表的最后一个参数类型之前加上省略符...

  • Go基础语法(四)

    可变参数函数 可变参数函数是一种参数个数可变的函数。 如果函数最后一个参数被记作 ...T ,这时函数可以接受任意...

  • Java中的可变参数

    学习笔记:可变参数,仅语法 可变参数又称参数的个数可变,用作方法形参的出现,那么方法的参数个数就是可变的了. 格式...

网友评论

      本文标题:Golang学习笔记-1.13 可变参数函数

      本文链接:https://www.haomeiwen.com/subject/egeimftx.html