首页 > 其他分享 >Go的可变参数函数

Go的可变参数函数

时间:2024-03-26 11:12:23浏览次数:24  
标签:... 函数 fmt Println 参数 可变 Go

可变函数是指可以接收可变数量的参数的函数。在 Golang 中,可以传递与函数签名中引用的类型相同的不同数量的参数。

在声明可变函数时,最后一个参数的类型前会有一个省略号"...",这表明该函数可以用任意数量的该类型参数来调用,可以是0个、1个或者多个。

这种类型的函数在不知道传递给函数的参数个数时非常有用,最好的例子就是 fmt 软件包中的内置 Println 函数,它就是一个可变函数。

func Println(a ...interface{}) (n int, err error)

先来看看 fmt.Println 函数示例

package main

import "fmt"

func main() {
    fmt.Println()
    fmt.Println("one")
    fmt.Println("one", "two")
    fmt.Println("one", "two", "three")
}

结果:


one one two one two three

第一条结果是空白,因为没有输入任何参数。

 

下面看看可变函数

可变函数的语法就是:

function function_name(para1, para2...type)type {// code...}

可变函数中:

·函数中...type 的行为和切片一样。假如我们定义的一个函数 add(b...int),那么这里的参数就是 []int 类型的

·可以向可变函数传递已经存在的切片

·如果没有向可变函数传递任何参数,则函数中的切片是空切片

·可变函数常用于字符串的格式化

·可以向可变函数传递多个切片

·不可以将可变参数作为返回值,但是可以以切片的方式返回

 

示例一

// Go program to illustrate the concept of variadic function
package main

import (
    "fmt"
    "strings"
)

// Variadic function to join strings
func joinStr(elements ...string) string {
    return strings.Join(elements, "-")
}

func main() {

    // zero argument
    fmt.Println(joinStr())

    // multiple arguments
    fmt.Println(joinStr("Variadic", "Function"))
    fmt.Println(joinStr("Variadic", "Function", "In", "Golang"))
    fmt.Println(joinStr("G", "o", "l", "a", "n", "g"))

}

结果:


Variadic-Function Variadic-Function-In-Golang G-o-l-a-n-g

 

示例二

// Go program to illustrate the concept of variadic function
package main

import (
    "fmt"
    "strings"
)

// Variadic function to join strings
func joinStr(elements ...string) string {
    return strings.Join(elements, "-")
}

func main() {
    // pass a slice in variadic function
    elements := []string{"Variadic", "Function", "In", "Golang"}
    fmt.Println(joinStr(elements...))
}

结果:

Variadic-Function-In-Golang

可变参数的顺序

函数中,只能包含一个可变参数,而且必须是函数的最后一个参数,不然编译就会报错。

 

何时使用可变函数

·替代需要向函数传递切片的场景

·不知道函数参数数量的场景

·提高代码的可读性

·传递的参数不属于同一种数据结构,比如切片、数组等,可变函数可以避免创建新的数据结构来传递这些参数

 

标签:...,函数,fmt,Println,参数,可变,Go
From: https://www.cnblogs.com/abclife/p/18087201

相关文章

  • Django之权限管理
    一,引入1.为什么要有权限?2.为什么要开发权限的组件?3.在web开发中,什么是权限?4.表结构的设计权限表IDURL1/user_list/2/customer_list/用户表IDUSER_NAME1root2root2角色/用户组表ID组1销售2开发用户与角色的......
  • CPPB 表中的TXN_CATEGORY
    cst_pac_period_balanceTXN_CATEGORY1    期初    2    成本更新:新成本或百分比变动    3    自有成本事务处理    4    非返工完成    5    成本更新:值变动    6    返工发放    7    返工完成    8    组......
  • 肖sir__python之函数5.1
    函数:一、什么是函数定义:函数是组织好,可重复使用,用来实现单一,或关联功能的代码段二、pycharm中的表结构项目,包(init)或目录,py文件,py文件包含多个函数或类等    三、函数的有哪些优点?1、降低代码冗余2、增加代码的复用性,提高开发效率3、提高程序的拓展性4、封装:就是......
  • google搜索如何修改搜索结果地区
    本文写于2024年03月25日,阅读时请注意时效。解决使用谷歌搜索引擎的时候经常会因为IP地址位置导致搜索结果的语言出现偏差,尤其是使用汉语进行搜索时常常会导致搜索结果中出现很多日语等语言结果造成干扰的问题。设置位置在:首页→右下角Settings→Searchsettings→左上角......
  • c语言应用,函数综合应用(2)
    c语言刚开始学习的时候,一般来说,我们如果只是在一个源文件里面编程,那么我们都会将包装的模块化函数都放在上面,把主函数放在下面的位置,目的是为了让编译软件知道主函数里调用的函数位置但是,若是我们将这些包装的模块化函数放在主函数的下面会发生什么情况呢?虽然程序依然可以继续......
  • c语言中的goto语句,goto语句的使用
    在c语言中,goto语句与分支语句if,switch不同,也和循环语句while,for,do...while不同,goto语句被称为无条件转移语句,也被称为转向语句,其实和break,return语句是同一个类型。goto语句的使用一般都需要一个again进行配合,当使用goto语句时,程序会转跳回again处重新运行again后的程序。got......
  • C++缺省参数与函数重载
    1.缺省参数1.1定义即函数声明或定义时为函数指定一个缺省值,如果调用函数时传入参数,则变量的值为实参的值,如果调用时未传入参数,则变量的值为缺省值。//其中a=0即为定义的缺省值voidFun_test(inta=0){ cout<<"a="<<a<<endl;}intmain(){//传入参数,a......
  • C语言-内存函数
    文章目录1.memcpy1.1.memcpy语法形式1.2.memcpy的模拟实现2.memmove2.1.memmove的语法形式2.2.memmove的模拟实现3.memset3.1.memset的语法形式4.memcmp4.1.memcmp的语法形式1.memcpy1.1.memcpy语法形式void*memcpy(void*destinotion,const*source,size_tnu......
  • 函数‘select’标签‘"data.frame"’找不到继承方法
     001、R语言中出现如下报错>a<-1:5>b<-letters[1:5]>test<-data.frame(a,b)>library(dplyr)>select(test,a)Errorin(function(classes,fdef,mtable):函数‘select’标签‘"data.frame"’找不到继承方法##此处报错 002、原因分......
  • 【笔记】普通生成函数
    【笔记】普通生成函数0前置芝士0.1等比数列因为我不会,所以在这里提一嘴。\(a_i=a_{i-1}q\Rightarrowa_i=a_1q^{i-1}\)\(S=\sum\limits_{i=1}^na_i\RightarrowqS=\sum\limits_{i=2}^{n+1}a_i=S-a_{n+1}+a_1\)\(\RightarrowS=\dfrac{a_1(q^n-1)}{q-1}\)​0.2泰勒级......