Go - 函数/方法 的 变参

变参 本质上就是一个切片。只能接收一个或多个同类型参数,且 必须放在参数列表的 尾部

func test(s string, a ...int) {
    fmt.Printf("%T, %v\n", a, a) // 显示类型 和 值
}

func main() {
    test("abc", 1, 2, 3, 4)
}

输出:

[]int, [1, 2, 3, 4]

将切片作为变参时,须进行 展开操作(后面加“...”)。如果是数组,先将其转换为切片。

func test(a ...int) {
    fmt.Println(a)
}

func main() {
    a := [3]int{10, 20, 30}
    test(a[:]...)
}

既然变参是切片,那么参数复制的仅是切片自身,并不包括底层数组,也因此可修改原数据。如果需要,可用内置函数 copy(), 复制底层数据。

func test(a ...int) {
    for i := range a {
        a[i] += 100
    }
}

func main() {
    a := []int{10, 20, 30}
    test(a...)

    fmt.Println(a)
}

输出:

[110 120 130]
时间: 2024-10-24 23:49:39

Go - 函数/方法 的 变参的相关文章

java函数方法

1.方法重载 (1)源代码 // MethodOverload.java // Using overloaded methods public class MethodOverload { public static void main(String[] args) { System.out.println("The square of integer 7 is " + square(7)); System.out.println("\nThe square of doubl

thinkphp模版调用函数方法

原文:thinkphp模版调用函数方法 {变量|函数1|函数2|函数3=参数1,参数2,参数3,###} ###为第4个参数,代表变量替换为第4个参数 举例: {$username|substr=0,3}取标题中前3个字符 {$times|date='Y-m-d H:i:s',###}将times时间戳转换为日期格式 ================================================== 冒号执行函数的用法:输出方法并执行返回值 {:U('user/insert')

Go语言之函数方法

在Go语言中,函数和方法不太一样,有明确的概念区分.在其他语言中,比如Java,一般来说,函数就是方法,方法就是函数.但是在Go语言中,函数是指不属于任何结构体.类型的方法.也就是说,函数是没有接收者的:而方法是有接收者的.我们说的方法要么是属于一个结构体的,要么属于一个新定义的类型的. 函数 函数和方法,虽然概念不同,但是定义非常相似.函数的定义声明没有接收者,所以我们直接在Go文件里.Go包之下定义声明即可. func main() {     sum := add(1, 2)     fm

数组和函数方法

数组:是一个具有相同类型的数据值的索引集合 数据类型[]变量名=new 数据类型[数组长度]; 定义一个长度为五的整数数组:int [] a=new int[5]; 直接初始化数据:int []a={      }: 数据长度:a.length 注意:数组只能是一种类型 数组定以后分配了连续的内存空间 数组下标从0,开始到数组长度-1 数组下标不能为0,也不能为小数 数组长度只能是整数,不能是长整形数字 数组声明定义后长度无法改变 数组应用:生成五个不相同的两位数,并按从小到大的顺序排列 考(下

程序流程控制--函数方法调用

在一个Java类中,方法的名称相同,但是方法的参数不同,这样的函数方法称为方法的重载 * 重载的区别在于参数的不同,三种不同形式: * 参数的顺序不同:参数的类型不同:参数的个数不同 简单类型的变量只是传递变量的值,而不是地址 * 这个是最基础的值传递 * 对于复杂(引用)类型的变量传递的也是值,但是这个值的内容是一个地址 * 因此虽然说在Java中它仍然叫做值传递,但是因为值是地址, * 所以在接收的方法中也有可能会改变原来引用类型变量的数据值 猜数字游戏程序: public class My

JavaScript函数内部属性和函数方法

函数是对象,有自己的属性和方法 .首先通过console下输出的函数属性方法来直观的看一下: 函数内部属性只要包括两个特殊的对象:arguments和this. 函数属性包括:length和prototype 函数方法(非继承)包括:apply()和call() 继承而来的函数方法:bind().toString().toLocaleString().valueOf() 其他的目前不熟,后面再补充 1. 函数内部属性 在函数内部,有两个特殊的对象,arguments和this. argument

C#.NET常用的函数方法大全

C#.NET常用的函数方法大全 1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.DateTime.Now; 1.2 取当前年 int 年=currentTime.Year; 1.3 取当前月 int 月=currentTime.Month; 1.4 取当前日 int 日=currentTime.Day; 1.5 取当前时 int 时=current

yaf函数方法及使用

@yaf函数方法使用规则 1.yaf中类的加载规则, 都是一样的: Yaf规定类名中必须包含路径信息, 也就是以下划线"_"分割的目录信息. Yaf将依照类名中的目录信息, 完成自动加载.例如:/admin_login  表示这样的路径:APP_PATH/admin/login.php. @Yaf_Bootstrap_Abstract 1.bootstrap是yaf提供的一个全局配置的入口, 当bootstrap被调用的时刻, Yaf_Application就会默认的在APPLICAT

php中常量 const属性,静态属性,静态的函数方法

<?php//php中的常量define('MYNUM', 2000);echo MYNUM.'<br>';if(!defined('MYNUM')){ define('MYNUM', 4000);}echo MYNUM;//类内声明及使用class TestConst { const COUNTRY = 'China'; //const不能加public, static也不需要$, 变量名称大写 static $static = 'Static'; public function ge