golang 函数传参打包解包 不定长参数 ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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语言提供了这种传参方式,使用方法就是在参数名后,参数类型前加三个点“.”,即表示该参数代表后面的许多不确定个数的参数集合,如果要使用该函数,除了一个个传入外,也可以传入一个切片,在切片后添加三个点,既可以拆开传入。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通