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…

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

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

js菜单自适应的实现

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

promise简析

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

webpaper网页出题语言

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

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

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

h5离线应用

h5离线应用 所谓离线应用,就是断网之后还可以运行的应用。h5提供了application cache,可以保存网页的离线数据。CSDN的Markdown编辑器就运用了application cache,在没有网络的情况下,一样可以正常使用,这就是一个很好…

[deviceone开发]-do_RichLabel的简单示例

一、简介 do_RichLabel支持html格式的文本内容,但是只支持部分标签,这个示例列出了一些支持的常用标签,android能支持的标签相对ios更少 二、效果图 三、相关下载 https://github.com/do-project/code4do/tree/master/richlabel_demo 四、相关…

使用rpm包升级ntpd服务_服务器准备升级,小程序将暂停使用

今天说3件事情:一、由于用户增速超出了我们的预期,为确保法助攻小程序的使用体验,我们购买了更高配置的服务器,目前,内部测试已完成,现决定对服务器进行正式升级。服务器升级时间:8月7日(本周五…

重装Nodejs后,webstorm代码报错问题

项描述现象之前没有问题的代码,突然出现很多奇怪的错误原因没有更新webstorm的Nodejs路径设置造成的解决办法重新设置webstorm的Nodejs路径,见下图 重新选择Nodejs安装目录,点击应用

java peek函数_基础篇:JAVA.Stream函数,优雅的数据流操作

写在开头:本文是转载于掘金上的一篇文章,已获得原作者授权,我会在文章最后放上原作者和原文链接。前言平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看。java提供了Stream的概念,它可以让我…

mongodb 数组添加_NoSQL之MongoDB——简介

MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性1.文档数据库MongoDB用一个文档来表示一条记录,文档的数据结构由键值对组成。MongoDB文档类似于JSON对象,字段值可能是文档,数组&#xff…

Buying Feed, 2010 Nov (单调队列优化DP)

约翰开车回家,又准备顺路买点饲料了(咦?为啥要说“又”字?)回家的路程一共有 E 公里,这一路上会经过 K 家商店,第 i 家店里有 Fi 吨饲料,售价为每吨 Ci 元。约翰打算买 N 吨饲料&…

一次真实的XXS攻击

这是一个真实的事,一家比较大的公司举办的一个全国性的投票,然而,页面确实写得很烂,做假太容易。 首先,找到投票按钮的源代码: 这个”tp”类就是投票事件的定位关键字。 然后,打开source下的源…

使用Chrome Dev Tools, deb.js调试Javascript小技巧

本文讲介绍一些基于 Chrome Dev Tools 的实用的客户端Javascript 调试小技巧。我将重点关注那些无从下手,不知道该在哪儿添加断点的情景。 首先看下本文主题: 找出哪段代码正在修改了页面找出谁发送了某个ajax请求在抛出异常时触发断点条件断点事件断点…

jenkins Auth fail验证失败

重新设置密码转载于:https://www.cnblogs.com/cocoat/p/5982931.html

CSS3 Perspective

一 、在元素的父元素上使用 在父元素上使用Perspective属性可以使用透视投影视图,在父元素上加上: perspective:400px 表示相机距离屏幕位置为400px。默认相机对准父元素的中心,要重设相机的焦点可以使用: perspective-origin…

状态模式案例分析

需求 初始状态下,【暂停按钮】不可点,所有数轴可调: 点击【动态波】后,【暂停按钮】可点,所有数轴可调: 点击【暂停按钮】后,“暂停”变为“播放”,所有数轴不可调: 分析需求 上面…

Linux系统IP地址

1、IP地址概述 2、配置IP地址 查看IP地址 在网卡上绑定一个IP地址 同一张网卡上绑定多个IP 绑定一块网卡设备 修改或删除IP地址 IP地址概述 这里不多赘述,参考《计算机网络》课程。 配置IP地址 [rootweekend110 ~]# ifconfigeth0    Link encap:Ethernet HWadd…