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); ...
随机推荐
- HUD:2853-Assignment(KM算法+hash)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2853 Assignment Time Limit: 2000/1000 MS (Java/Others) ...
- Linux学习-Boot Loader: Grub2
boot loader 的两个 stage 在 BIOS 读完信息后,接下来就是会到第一个开机装置 的 MBR 去读取 boot loader 了.这个 boot loader 可以具有选单功能.直接 ...
- LR采用的Sigmoid函数与最大熵(ME) 的关系
LR采用的Sigmoid函数与最大熵(ME) 的关系 从ME到LR 先直接给出最大熵模型的一般形式,后面再给出具体的推导过程. \[\begin{align*} P_w(y|x) &= \df ...
- 从几率到logisitic函数
odds 几率,又称事件的优势比.几率和概率的关系如下: o=p1−pp=o1+o Logistic 回归模型的因变量只有 1/0 两种取值.假设在 p 个独立自变量 x1,x2,…,xp 作用下,记 ...
- 实用jstl实现未登录时不能绕过登录界面的效果
package com.filter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; ...
- Welcome-to-Swift-16自动引用计数(Automatic Reference Counting)
Swift使用自动引用计数(ARC)来跟踪并管理应用使用的内存.大部分情况下,这意味着在Swift语言中,内存管理"仍然工作",不需要自己去考虑内存管理的事情.当实例不再被使用时, ...
- 【bzoj4128】Matrix 矩阵乘法+Hash+BSGS
题目描述 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) 输入 第一行两个整数n和p,表示矩阵的阶和模数,接下来一个n * n的矩阵A.接下来一个n * n的矩阵B 输出 输出 ...
- 校赛——1096Is The Same?(KMP或字符串的最小、大表示法)
1096: Is The Same? Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 26 Solved: 8[Submit][Status][Web B ...
- 刷题总结——寻宝游戏(bzoj3991 dfs序)
题目: Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄 ...
- eval()函数的巧用
eval的功能 将字符串str当成有效的表达式来执行.. 写函数,专门计算图形的面积 其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积 调用函数area(‘圆形’,圆半径) 返回圆的面积 调用 ...