sprintf函数_三分钟学 Go 语言——函数深度解析(下) 可变参数
接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解。
- 函数简单使用和基本知识解析
- 匿名函数和闭包
五一放假期间,我懂得,估计你们都不想学习。
小熊这两天因为个人种种令人难受的原因,没有能更新,也没有提前请假,给大家道歉歉了。
这次小熊给大家带来了一个函数的特性【可变参数】,作为函数专题的结束。
有没有发现?
我们有时候会用到的输出、错误输出、字符串格式化系统函数,你可以传入任意个数的参数,他全都能处理!
fmt.Println("a","b","c","d")
就像一个任劳任怨的老父亲,那到底是为什么呢?
因为
因为在go
语言中语言级别自带了一种语法,可以声明可变参数!
func 函数名(固定参数,v ...T) (返回参数列表){
函数体
}
怎么用?
先和小熊一起试试,写一个不定参数累加的函数
func sum(t ...int) (res int) {for _, v := range t {res += v}return res
}
fmt.Println(sum(1, 2, 3, 4, 5))
输出结果
15
如果连参数类型都不知道,怎么办?
上一节我们已知参数类型是int
,还记得我们前面说过的switch
判断类型做处理的例子吗?switch和type switch。
参考这个例子重写下函数,让他可以接收任意类型的参数。
func sumNum(t ...interface{}) (res float64){for _,tmp := range t{switch v :=tmp.(type) {case int:res += float64(v)case float64:res+= vcase float32:res += float64(v)}}return res
}
测试下
fmt.Println(sumNum(1,2.1,"asd",true))
因为忽略了输出
3.1
但是上面的例子并没有覆盖全部的数字,如果一个一个类型的匹配会疯掉的。有没有更好的方法,可以一下子匹配到所有的数字?
func sumNum(t ...interface{}) (res float64) {for _, tmp := range t {switch v := tmp.(type) {case int, int8, int16, int32, int64, uint, uint8, uint16, uint32,uint64, float32, float64, complex64, complex128:convertStr := fmt.Sprintf("%v", v)convertFloat64, _ := strconv.ParseFloat(convertStr, 64)res += convertFloat64}}return res
}
上面的代码在case里一下子匹配了所有可能的数字类型,再用格式化输出转换成字符串,最后转换成float64
来使用,这是一种折中的办法,速度可能会比较慢(因为格式化内部逻辑比较复杂消耗速度)。
为了保证速度还是不要省掉一大堆的case
,明确了类型再做强转。
留给你的寻找的答案
有没有一种只留一个case
,同时处理速度又快的方法呢?
—— 爱你们的小熊
sprintf函数_三分钟学 Go 语言——函数深度解析(下) 可变参数相关推荐
- operate函数_跟着 redux 学 compose组合函数
▲ 点击上方蓝字关注我 ▲ 把你的心 我的心串一串 串一株幸运草 串一个同心圆 文 / 景朝霞 来源公号 / 朝霞的光影笔记 ID / zhaoxiajingjing 目录0 / 热热身1 / red ...
- python爬虫之bs4库_三分钟搞定bs4库的解析器
The Dormouse's story Once upon a time there were three little sisters; and their names were Elsie, L ...
- 翻译:三分钟学懂JSON
Understanding JSON: the 3 minute lesson 三分钟学懂JSON Two months ago you'd never heard of JSONIf you are ...
- python高阶函数(三分钟读懂)
python高阶函数(三分钟读懂) 函数式编程 Python中,函数是一等对象 一等对象:具有特点 ① 对象是在运行时创建的 ② 能赋值给变量或作为数据结构中的元素 ③ 能作为参数传递 ④ 能作为返回 ...
- DL:听着歌曲《成都》三分钟看遍主流的深度学习的神经网络的发展框架(1950~2018)
DL:听着歌曲<成都>三分钟看遍主流的深度学习的神经网络的发展框架(1950~2018) 视频链接:听着歌曲<成都>三分钟看遍主流的深度神经网络的发展框架(1950~2018) ...
- 数据库创建函数_达梦数据库创建UUID函数
数据库创建函数_达梦数据库创建UUID函数 接触达梦数据库有一段时间了,整理了一些资料,今天分享一下达梦数据UUID自定义函数 UUID函数定义 很多数据库都有提供UUID函数,可是接触达梦数据库后, ...
- 《C语言内核深度解析》——笔记及拓展(1)
文章是我前几天读了朱有鹏,张先凤老师的<嵌入式Linux与物联网软件开发:C语言内核深度解析>写的,拜读之后,虽没有醍醐灌顶,至少解开了我之前的一些疑惑. <嵌入式Linux与物联网 ...
- 嵌入式Linux与物联网软件开发:C语言内核深度解析
嵌入式Linux与物联网软件开发:C语言内核深度解析 1.C语言与内存 1.引言 2.计算机程序运行的目的 3.位.半字.字的概念和内存位宽 ...
- 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一第1章 C语言与内存1.1 引言...
本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第1章,第1.1节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"华章计算机&quo ...
最新文章
- Python修改Mitsuba的XML相关参数
- .NET泛型解析(下)
- PTA 基础编程题目集 7-7 12-24小时制 C语言
- linux 下jdk的卸载与安装
- mysql协议重传,MySQL · 源码分析 · 网络通信模块浅析
- Starling自适应设备大小的做法
- VSCode下载与安装
- jcr多久更新一次_sci分区什么时候更新
- vue+three.js导入obj模型不显示问题
- 极智开发 | Go 安装教程
- 给定三角形三个顶点的坐标,如何求三角形的外心的坐标呢?
- c语言剧透,破镜重圆 ·《C语言修仙》by 十四洲
- The value of ESP was not properly saved across a function call解决方案
- IBM DB2基础知识学习作业
- C语言求CHO的相对分子质量
- win10查看笔记本电脑电池健康度
- rocket使用实例
- 【AAAI2021】Dual-Level Collaborative Transformer for Image Captioning
- 数据分析实践——面试官:如果DAU下降如何归因?(以抖音为例)
- 【攻破css系列——第二天】字体属性和文字属性