sprintf函数_三分钟学 Go 语言——函数深度解析(下) 可变参数

接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解。

  • 函数简单使用和基本知识解析
  • 匿名函数和闭包

五一放假期间,我懂得,估计你们都不想学习。

151acc8018b101c090dcb90f81a4dbbe.png

小熊这两天因为个人种种令人难受的原因,没有能更新,也没有提前请假,给大家道歉歉了。

da0a30b4903cf4bba38bdccdc83651d8.png

这次小熊给大家带来了一个函数的特性【可变参数】,作为函数专题的结束。

有没有发现?

我们有时候会用到的输出、错误输出、字符串格式化系统函数,你可以传入任意个数的参数,他全都能处理!

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,同时处理速度又快的方法呢?

—— 爱你们的小熊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手工画设计模式的类图

画图成果 面试常考设计模式,往往需要动手画类图。之前面试的时候碰到画类图,往往直奔主题,立即开始画,往往画得很乱。其实面试是一个过程,看中的是思考分析解决问题的过程,结果反而不那么重要。画设计模式…

Reason: image not found

刚生的Xcode8,出现好多Error,有些Error真的太麻烦不想记录,现在这个挺简单的,就记下来,控制台输出的Error信息如下: fix: Target -> Build Phases ->Link Binary With Libraries&#xff…

go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...

利用splash爬取京东商品信息一、环境window7python3.5pycharmscrapyscrapy-splashMySQL二、简介为了体验scrapy-splash 的动态网页渲染效果,特地编写了利用splash爬取京东商品信息的爬虫,当然站在爬取效率和稳定性方面来说,动态网页爬取首先应…

jquery事件绑定解绑机制源码分析

引子 为什么Jquery能实现不传回调函数也能解绑事件?如下: $("p").on("click",function(){alert("The paragraph was clicked."); });$("#box1").off("click"); 事件绑定解绑机制 调用on函数的时候…

微信小程序导航:免费视频+精品教程+DEMO集合(长期更新)

1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t14764346784612:简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/?t14764346775993:设计指南:https://mp.weixin.qq.com/debug/wxadoc/desig…

怎么查看usb读取信息_电脑弹出USB设备时提示该设备正在使用中的解决方法

转载的文章,原文:电脑弹出USB设备时提示该设备正在使用中的解决方法-系统城​www.xitongcheng.com电脑弹出USB设备时提示该设备正在使用,虽然在正常显示时并没有程序在使用,但是确实会出现这种情况,实际上确…

js菜单自适应的实现

功能示意图 菜单自适应示意图如下: 对象A可以拖动,缩放。菜单跟随对象A拖动,位置优先级为下面、上面、右边、左边、中间。 实现思路 其实菜单放在上下左右中,都是它的left和top在变,我们只要依次计算菜单在下/上/右…

python转换为c代码_bash 转换为C代码

bash 转换为C代码,并编译为可执行文件[rootlocalhost ~]# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz[rootlocalhost ~]# tar xvfz shc-3.8.9.tgz[rootlocalhost ~]# cd shc-3.8.9[rootlocalhost shc-3.8.9]# gcc -c shc.c[rootlocalhost shc-3.8.9]# gcc…

promise简析

promise可以解决多个回调函数嵌套问题,将嵌套所表示的流程通过同步的代码更加清晰的表达出来。 promise的用法与使用配置文件很类似:启动异步函数,在then里面配置好异步函数成功或执行失败的回调函数,然后就可以去干别的事了。 …

python cookies过期_Python3中关于cookie的创建与保存

1.cookie的作用cookie 是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据,就像有些网站上的一些数据是需要登录后才能看得到,那么想抓取某个页面内容,就需要用到cookie来模拟登陆了。在用cookie模拟登陆的时候&…

GIS-004-Cesium版权信息隐藏

.cesium-widget-credits { display: none; } .cesium-viewer .cesium-widget-credits { display: none; }转载于:https://www.cnblogs.com/defineconst/p/5965531.html

webpaper网页出题语言

目的 方便编写web试题,直接使用几个简单的标签,就可以生成一份可以在web上使用,并且可以打印出来的题。 效果预览 考卷打印效果 生成考卷发送给学生,或打印出来线下考 答案卷打印效果: 通过点击”显示答案”生成答…

python教程很详细_Python编程入门教程:从入门到高级,非常详细

本文的资料和内容是我下载的,觉得非常有用,于是转过来大家瞧瞧:这里给初学Python的朋友提供一些建议和指导吧。大神请无视,俗话说:授人以鱼不如授人以渔。所以我这里只是阐述学习过程,并不会直接详细写某个…

NOIP复习资料——往年习题精选

一、计算机系统 1.在以下各项中,()不是CPU的组成部分。(NOIP2007) A.控制器B.运算器C.寄存器D.主板 【答案】D。CPU由控制器、运算器和寄存器组成。 2.在下列各项中…

【笔记】js重写

js重写,以localstorage为例: var originalSetItem localStorage.setItem; localStorage.setItem function(){// 这里做一些额外的事...//继续调用原来的方法originalSetItem.apply(this, arguments); } 代码引自:这里

(中英)作文 —— 标题与小标题

一个押韵的标题,会十分讨巧; 当世界年轻的时候, 当中国年轻的时候,当世界衰老的时候;1. 英文 A year of no significance. An animal of no significance.2. 名著的变形 双城记:A tale of Two cities Tales…

table 表格点击当前行按钮隐藏当前的另一个按钮_Excel表格为什么那么慢已经应该如何解决(四)一类特殊的函数易变函数(volatile function)...

我们,让Excel变简单今天我们把主题聚焦在一类特殊函数造成的问题上——volatile function。这一类函数有人把他们翻译成“易变函数”,其实挺贴切的。本系列其他文章:Excel表格为什么那么慢已经应该如何解决(一)概述Excel表格为什么那么慢已经…

h5 storage事件监听

分析 引用《h5移动web开发指南》上的话: “当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了storage事件,就会触发” 所以,localStorage的例子运行需要如下条件: 同一浏览器打开了两个同源页面其中一个网页修…

python工作台_FreeCAD二次开发-创建Python工作台,添加菜单栏和工具条,FreeCAD命令

FreeCAD作为一款基于OpenCasCAD内核的开源CAD软件,可以在GitHub上下载源代码。阅读源代码,有助于我们学习CAD软件架构,了解底层几何算法。由博主Caesar卢尚宇自学整理(纯粹出于对三维CAD软件开发的热爱)内容出自FreeCAD官方社区https://wiki.…

3d照片环效果(修改版--添加了x轴y轴双向转动和修复模糊度的bug)

今天用用前两天总结的css3新效果写了一个3d照片环的效果&#xff0c;其中还有些bug大家可以看一看&#xff0c;一起改进。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><sty…