Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[GO] 变参函数-GO中函数传递变长参数

[GO] 变参函数-GO中函数传递变长参数

原创
作者头像
唯一Chat
修改于 2020-10-16 09:07:01
修改于 2020-10-16 09:07:01
95600
代码可运行
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地
运行总次数:0
代码可运行

如果函数的最后一个参数是采用 ...type 的形式,那么这个函数就可以处理一个变长的参数,这个长度可以为 0,这样的函数称为变参函数。

示例函数和调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func myFunc(a, b, arg ...int) {}

func Greeting(prefix string, who ...string)
Greeting("hello:", "Joe", "Anna", "Eileen")

这里函数在定义参数时是who ...string  , 调用时传递了3个string类型的参数,在函数内who是[]string类型 , 可以遍历who这个变量来拿到数据

如果一个变长参数的类型没有被指定,则可以使用默认的空接口 interface{},这样就可以接受任何类型的参数。该方案不仅可以用于长度未知的参数,还可以用于任何不确定类型的参数。一般而言我们会使用一个 for-range 循环以及 switch 结构对每个参数的类型进行判断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func checkNames(..,..,values … interface{}) {
     for _, value := range values {
         switch v := value.(type) {
             case int:case float:case string:case bool:default:}
     }
 }

实际运用 , 在gorm的查询数据时 , 有使用变参函数 , 函数定义

1

func (s *DB) Select(query interface{}, args ...interface{}) *DB

函数使用时

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.Select("name, age").Find(&users)
//// SELECT name, age FROM users;

db.Select([]string{"name", "age"}).Find(&users)
//// SELECT name, age FROM users;

db.Table("users").Select("COALESCE(age,?)", 42).Rows()
//// SELECT COALESCE(age,'42') FROM users;

开源作品

开源GO语言在线WEB客服即时通讯管理系统GO-FLY

github地址:go-fly

在线测试地址:https://gofly.sopans.com

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【GOFLY】基于GO语言gin框架和websocket实现的全开源WEB客服即时通讯管理系统
基于GO语言实现的web客服即时通讯与客服管理系统。非常适合给自己的网站增加在线客服功能,代码简单也适合学习。
唯一Chat
2020/09/28
2.3K0
【GOFLY】基于GO语言gin框架和websocket实现的全开源WEB客服即时通讯管理系统
[Go]GO语言实战-GO-FLY在线客服cobra库命令行参数解析
最开始的解析命令行参数是使用的标准库里面的flag包,后来想增加新的参数的时候比较复杂和困难,因此使用cobra更加简单一些
唯一Chat
2020/09/10
7460
[Go]GO语言实战-GO-FLY在线客服cobra库命令行参数解析
golang学习笔记9:函数参数与返回值
Go 默认使用按值传递来传递参数,也就是传递参数的副本。函数接收参数副本之后,在使用变量的过程中可能对副本的值进行更改,但不会影响到原来的变量,比如 Function(arg1)。
JKXQJ
2018/11/06
1.1K0
Gorm框架学习---CRUD接口之查询
GORM 提供了 First、Take、Last 方法,以便从数据库中检索单个对象。当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误
大忽悠爱学习
2022/09/27
1.1K0
Go 语言怎么使用变长参数函数?
Go 语言中函数的最后一个参数可以是变长参数,细心的读者朋友们可能已经发现,在 Go 语言标准库 fmt包中就有使用变长参数函数,比如 Println 和 Printf。
frank.
2022/10/28
9190
Go 语言基础入门教程 —— 函数篇:变长参数
所谓变长参数指的是函数参数的数量不确定,可以按照需要传递任意数量的参数到指定函数,比如 fmt.Printf 函数的参数列表显然就是个变长参数。
学院君
2019/08/08
5760
Go ORM 干啥的?
什么是ORM ,即Object-Relationl Mapping,它的作⽤是在关系型数据库和对象之间作⼀个映射,
阿兵云原生
2023/02/16
2.9K0
Go开源ORM——GORM
可以通过定义嵌套gorm.Model这个结构体的类型来定义实体类,gorm.Model中定义了数据库表的一些常用基本字段
歪歪梯
2020/10/26
2.2K0
Gorm实战,轻松掌握数据库增删改查技巧!
CRUD通常指数据库的增删改查操作,本文详细介绍了如何使用GORM实现创建、查询、更新和删除操作。
贾维斯Echo
2024/01/12
3.5K0
Gorm
自动迁移仅仅会创建表,缺少列和索引,并且不会改变现有列的类型或删除未使用的列以保护数据。
TomatoCool
2023/10/16
3320
Go 函数式编程篇(二):参数传递、变长参数与多返回值
上篇教程我们介绍了 Go 语言中函数的基本定义和调用,其中也涉及到了函数的传参和返回值,只不过那里演示的是最简单的场景,今天我们就更复杂的传参和返回值进行介绍。
学院君
2023/03/03
1.6K0
Go 函数式编程篇(二):参数传递、变长参数与多返回值
GO 语言如何用好变长参数?
对于函数重载相信编码过的 xdm 肯定不会陌生,函数重载就是在同一个作用域内定义多个具有相同名称但参数列表不同的函数
阿兵云原生
2023/10/24
3350
GO 语言如何用好变长参数?
开源在线客服系统-客服系统历史消息记录功能-点击加载历史聊天记录-分页展示历史消息功能实现
之前开发的开源在线客服系统gofly,访客端一直没有展示历史聊天记录,最近抽时间给加上了
唯一Chat
2023/04/13
1.1K0
开源在线客服系统-客服系统历史消息记录功能-点击加载历史聊天记录-分页展示历史消息功能实现
GORM CRUD 10 分钟快速上手
ORM(Object Relational Mapping),中文名为对象关系映射。
恋喵大鲤鱼
2023/10/12
7010
【译】golang 可变参数函数终极指南
Ultimate Guide to Go Variadic Functions 原文地址 https://blog.learngoprogramming.com/golang-variadic-funcs-how-to-patterns-369408f19085
goodspeed
2020/12/22
3.5K0
【译】golang 可变参数函数终极指南
Go语言的可变(不定)长参数函数
上面的三个点(…)表示args是一个可变参数。在函数Function中,参数args会被当做一个slice来处理的。
sean.liu
2022/09/28
9700
Gorm 使用
使用 ORM 工具,通常需要在代码中定义模型(Models)与数据库中的数据表进行映射, 在 GORM 中模型(Models)通常是正常的结构体、基本的 go 类型或他们的指针,同时也支持 sql.Scanner 与 driver.Valuer 接口(interfaces)
王小明_HIT
2021/03/27
1.7K0
CC++变参函数
C语言中,有时需要变参函数来完成特殊的功能,比如C标准库函数printf()和scanf()。C中提供了省略符“…”能够帮主programmer完成变参函数的书写。变参函数原型申明如下:
恋喵大鲤鱼
2018/08/03
1.2K0
手把手教你学之golang反射(上)
orm这个概念相信同学们都非常熟悉,尤其是写过rails的同学,对active_record的强大肯定深有体会(得益于的method_missing和define_method方法,少写了海量代码),所以对orm我就不过多介绍了。本文要实现的orm只提供基本的CRUD(增删改查)和transaction(事务)功能,核心代码控制在300行左右。 如果想手把手照着写,需要先做一些准备工作。
李海彬
2020/11/23
6540
手把手教你学之golang反射(上)
Go gorm
在后端开发上,通常都要与资料库做操作(新增、修改、删除、查找),后端会撰写 SQL 语句,并且透过一些工具或套件(例如:pymysql)向 SQL 资料库来做沟通。而撰写原生 SQL 的缺点为:
f1sh
2024/07/29
1280
相关推荐
【GOFLY】基于GO语言gin框架和websocket实现的全开源WEB客服即时通讯管理系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验