代码改变世界

golang不定参数

  youxin  阅读(74)  评论(0编辑  收藏  举报

函数定义

首先来看如何定义一个不定参数的函数:

1

2

func YourFun(v... interface{}){

}

该函数定义,定义了一个接受任何数目任何类型参数的函数。这里特殊的语法是三个点“...”,在一个变量后面加上三个点后,表示从该处开始接受不定参数,不同于python,golang的不定参数如果将这里"interface{}" 替换成某一确定类型,那么其就只能接受该类型的不定参数。

 

解引用slice

当要传递若干个值到不定参数函数中得时候,可以手动书写每个参数,也可以将一个slice传递给该函数:

1

YourFunc (YourSlice...)

通过"..."可以将slice中得参数对应的传递给函数。相当于python中得“*args”。

这里要注意的是,解引用slice目前只能在不定参数函数传递参数时使用,在其他地方使用会报错。

 

复制代码
package main

import "fmt"

func f1(args ...int) {
    for _, v := range args {
        fmt.Println(v)
    }
}

func main() {

    f1()
    f1(1)
    f1(1, 2, 3)
}
复制代码

任意类型的不定参数

interface{} : 空接口类型,因为任意类型都实现了空接口,因此可以将任意类型对象赋值给空接口。

func f1(args ...interface{}) {
    for _, v := range args {
        fmt.Println(v.(int))//这里使用了接口类型断言
    }
}
复制代码
不定参数的传递

假设args是一个不定参数,则可以将该参数传递给其他具有不定参数的函数

func f1(args ...int) {
    f2(args...)
    f2(args[1:]...)
}

 
func f2(args ...int) {
    //
}
复制代码

 

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2013-08-24 单链表为什么要设置头结点
2013-08-24 KMP算法与一个经典概率问题
2013-08-24 转:惊人的答案:平均要取多少个(0,1)中的随机数才能让和超过1
2012-08-24 php solutions:创建画廊
2012-08-24 转:Node和Element的区别
点击右上角即可分享
微信分享提示