Go语言:变参函数
变参函数:
函数中形式参数的数目通常是确定的,在调用的时候要依次传入与形式参数对应的所有实际参数,但是在某些函数的参数个数可以根据实际需要来确定,这就是变参函数。
Go语言支持不定长变参,但是要注意不定长参数只能作为函数的最后一个参数,不能放在其他参数的前面。函数的声明如下:
Func functionName(variableArgumentName ... dateType) 返回值{
Body
}
不定长变参的实质就是一个切片,可以使用range遍历,例如:
Func f(args ...int){
For _,arg :=range args{
fmt.Println(arg)
}
}
我们熟知的fmt.Print()函数可以传递不同类型的参数,go语言规定,如果希望传递任意类型的变参,变参类型应该制定为空接口类型:interface{}.例如:
Func f(args ... Interface{}){
...
}
Go语言中,空接口可以指向任何数据对象,所以可以使用interface{}定义任意类型变量,同时interface{}也是类型安全的。
例:
package main
import (
"fmt"
)
func main() {
f(2, "Go", 8, "language", 'a', false, 'A', 3.14)
}
func f(args ...interface{}) {
var num = make([]int, 0, 6)
var str = make([]string, 0, 6)
var ch = make([]int32, 0, 6)
var other = make([]interface{}, 0, 6)
for _, arg := range args {
switch v := arg.(type) {
case int:
num = append(num, v)
case string:
str = append(str, v)
case int32:
ch = append(ch, v)
default:
other = append(other, v)
}
}
fmt.Println(num)
fmt.Println(str)
fmt.Println(ch)
fmt.Println(other)
}
输出:
[2 8]
[Go language]
[97 65]
[false 3.14]
变参函数难度不大,多理解理解,跟着写写,然后自己尝试些几个变参函数就可以了
Go语言:变参函数的更多相关文章
- C语言变参函数/Variadic fucntion
几个重要的 宏/类型 定义 Macros Defined in header <stdarg.h> va_start enables access to variadic function ...
- C语言变参函数的编写
1. 引言 一般我们编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的实际参数.但在某些情况下我 们希望函数的参数个数可以根据需要确定,因此c语言引入可变参数函数.典型的 ...
- C语言变参函数的实现原理
1. 变参函数简单示例 #include <stdarg.h> #include <stdio.h> int Accumlate(int nr, ...) { ; ; va_l ...
- C语言中变参函数传参探究
背景引入 近期在看一本书,叫做<嵌入式C语言自我修养>,写的内容对我帮助很大,是一本好书.在第6章,GNU C编译器扩展语法精讲一节,这本书给出了一些变参函数的例子: //1.变参函数初体 ...
- c语言可变参函数探究
一.什么是可变长参数 可变长参数:顾名思义,就是函数的参数长度(数量)是可变的.比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的.下面是 printf 函数的声明: in ...
- C 语言精髓之变参函数
我们以 printf 这个 very 熟悉的函数为例,来分析一下变参函数.先看下 printf 函数的定义: int printf(const char *fmt, ...) { int i; int ...
- 嵌入式C语言自我修养 08:变参函数的格式检查
8.1 属性声明:format GNU 通过 __atttribute__ 扩展的 format 属性,用来指定变参函数的参数格式检查. 它的使用方法如下: __attribute__(( forma ...
- go语言从例子开始之Example14.变参函数
可变参数函数.可以用任意数量的参数调用.例如,fmt.Println 是一个常见的变参函数. Example: package main import "fmt" //...int ...
- C语言可变参函数分析
code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...
随机推荐
- HDU 5527 Too Rich 贪心
题意: 有\(10\)种面值为\(1, 5, 10, 20, 50, 100, 200, 500, 1000, 2000\)的纸币,现在你要选最多的数量凑成\(p\)块钱. 分析: 同样分析问题的反面 ...
- springboot-vue-前后端数据交互
前端项目: pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- Leetcode 433.最小基因变化
最小基因变化 一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 "A", "C", "G", "T"中的任 ...
- Jeddict目前的使用现状
一.为什么使用jeddict 工具:提升生产力的工具:创建并部署一个CRUD服务系统,只需要5-10分钟 规范:生成的代码,都是稳定可执行代码(前端自动使用selenium框架测试,后端使用Arqui ...
- Linux Shell系列教程之(二)第一个Shell脚本
本文是Linux Shell系列教程的第(二)篇,更多shell教程请看:Linux Shell系列教程 通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们通过一个 ...
- Welcome-to-Swift-18类型转换(Type Casting)
类型转换是一种检查类实例的方式,并且哦或者也是让实例作为它的父类或者子类的一种方式. Type casting is a way to check the type of an instance, a ...
- 【Luogu】P3047附近的牛(树形DP)
题目链接 树形DP,设f[i][j]是当前在i点,j步之内有多少牛.从相邻点to的f[to][j-1]转移而来,减去重复计算即可. #include<cstdio> #include< ...
- kb-01-a<简单搜索--dfs八皇后问题变种>
题目描述: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的 ...
- [luoguP2761] 软件补丁问题(状压最短路)
传送门 n <= 20 很小 所以可以状态压缩 然后因为可能存在环,所以不能DP 那么就用spfa找最短路 被位运算坑了,不清楚优先级一定要加括号 ——代码 #include <queue ...
- 北京集训TEST13——PA(第k小数)
题目: Description [问题描述] 从n个数中选若干(至少1)个数求和,求所有方案中第k小的和(和相同但取法不同的视为不同方案).[输入格式] 第一行输入2个正整数n,k. 第二 ...