其他分享
首页 > 其他分享> > golang 函数传参打包解包 不定长参数 ...

golang 函数传参打包解包 不定长参数 ...

作者:互联网

package main

import (
    "fmt"
    "reflect"
)

func main() {
    str := "X"
    iSlice := []interface{}(nil)
    strSlice := []string{"Y", "X", "C"}
    for _, v := range strSlice{
        iSlice = append(iSlice, v)
    }
    if IN(str, iSlice...) {
        fmt.Println("Yes, IN it!")
    }
}

func IN(arg interface{}, args ...interface{}) bool {
    argType := reflect.TypeOf(arg)
    for index, value := range args {
        if reflect.TypeOf(value) == argType && value == arg {
            fmt.Println("Position", index, "Equal arg!")
            return true
        }
    }
    return false
}

  

上面的代码意思是创建函数IN,用于判断首个元素是否在某个可迭代类型中,这里采用不定长传参的方式,Go语言提供了这种传参方式,使用方法就是在参数名后,参数类型前加三个点“.”,即表示该参数代表后面的许多不确定个数的参数集合,如果要使用该函数,除了一个个传入外,也可以传入一个切片,在切片后添加三个点,既可以拆开传入。

 

标签:传参,...,fmt,arg,value,reflect,解包,iSlice
来源: https://www.cnblogs.com/haiton/p/16395834.html