广告
返回顶部
首页 > 资讯 > 精选 >Go语言如何使用变长参数函数
  • 703
分享到

Go语言如何使用变长参数函数

2023-07-02 17:07:48 703人浏览 泡泡鱼
摘要

这篇文章主要介绍“Go语言如何使用变长参数函数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言如何使用变长参数函数”文章能帮助大家解决问题。01 介绍Go 语言中函数的最后一个参数可以是变长参

这篇文章主要介绍“Go语言如何使用变长参数函数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言如何使用变长参数函数”文章能帮助大家解决问题。

01 介绍

Go 语言中函数的最后一个参数可以是变长参数,细心的读者朋友们可能已经发现,在 Go 语言标准库 fmt包中就有使用变长参数函数,比如 Println 和 Printf。

02 变长参数

顾名思义,变长参数是指参数的数量不固定,可以是 0 个,1 个或多个。变长参数的格式是 ...T,在参数的类型前面有 3 个 .,表示该参数是变长参数。

变长参数在函数体内是切片类型的参数,也就是说 ...T 等价于 []T。

变长参数在函数外部可匹配的参数类型有两种,分别是一个 []T 切片类型的变量,和多个 T 类型的变量,并且二者不可以同时使用,也就是说它们不能同时出现在函数的参数列表中。

03 变长参数函数

我们已经知道什么是变长参数,自然我们也就可以想到接受 ...T 形式的形参的函数就是变长参数函数。

一个变长参数函数只能有一个 ...T 形式的形参,并且该形参必须是函数参数列表中的最后一个形参。

需要注意的是,变长参数函数最容易踩的“坑”就是形参和实参的类型不匹配,例如以下这段代码:

func sum(args ...interface{}) {    res := 0    for _, v := range args {        res += v.(int)    }    fmt.Println(res)}func main() {    num := []int{1, 2, 3}    sum(num...)}

输出结果:

./prog.go:18:6: cannot use num (variable of type []int) as type []interface{} in argument to sum

阅读上面这段代码,我们发现程序运行错误的原因是实参类型和形参类型不一致,导致编译错误。可能有读者朋友们感到疑惑,int 类型的变量可以直接赋值给 interface{} 类型的变量,为什么会报错呢?

这是因为实参的类型是 []int,它不能匹配形参 []interface{}。修改该错误也简单,只需将实参的类型修改为 []interface{}。

num := []interface{}{1, 2, 3}

04 使用场景

我们了解完变长参数和变长参数函数,再通过一个示例代码加深一下读者朋友们的理解。

该使用场景是通过调用下游方法,输入用户的个人资料。但是,后期调用的下游方法的入参发生变化,新增了一个或多个请求参数。

如果不使用变长参数,我们原来调用该下游方法的代码都需要随之修改。以下是示例代码:

变更前的示例代码:

func CallUserCenter(name string, age int, gender string) (detail *User, err error) { detail, err = NewUserUsecase().Create(name, age, gender) if err != nil {  return } return}

变更后的示例代码:

func CallUserCenter(name string, age int, gender string, args ...interface{}) (detail *User, err error) { if len(args) == 0 {  detail, err = NewUserUsecase().Create(name, age, gender) } else {  detail, err = NewUserUsecase().Create(name, age, gender, args[0]) } if err != nil {  return } return}

调用函数的示例代码:

func main() { name := "frank" age := 18 gender := "male" detail, err := CallUserCenter(name, age, gender) if err != nil {  fmt.Printf("err=%v\n", err)  return } fmt.Printf("name:%s\nage:%d\ngender:%s\n", detail.name, detail.age, detail.gender) fmt.Printf("%s\n", "********************") name2 := "lucy" age2 := 17 gender2 := "female" salary2 := 5000 detail2, err := CallUserCenter(name2, age2, gender2, salary2) if err != nil {  fmt.Printf("err=%v\n", err)  return } fmt.Printf("name:%s\nage:%d\ngender:%s\nsalary:%d\n", detail2.name, detail2.age, detail2.gender, detail2.salary)}

关于“Go语言如何使用变长参数函数”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Go语言如何使用变长参数函数

本文链接: https://www.lsjlt.com/news/343649.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言如何使用变长参数函数
    这篇文章主要介绍“Go语言如何使用变长参数函数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言如何使用变长参数函数”文章能帮助大家解决问题。01 介绍Go 语言中函数的最后一个参数可以是变长参...
    99+
    2023-07-02
  • Go语言怎么使用变长参数函数
    目录01 介绍02 变长参数03 变长参数函数04 使用场景05 总结本文我们主要介绍在 Go 语言中怎么使用变长参数函数,先是介绍变长参数和变长参数函数的相关知识,然后列举了一个简...
    99+
    2022-11-13
  • Go语言中函数可变参数(VariadicParameter)详解
    目录基本语法示例一:函数中获取可变参数示例二:将切片传给可变参数示例三:多参数基本语法 在Python中,在函数参数不确定数量的情况下,可以使用如下方式动态在函数内获取参数,args...
    99+
    2022-11-13
  • GO语言不固定参数函数与匿名函数如何使用
    这篇文章主要介绍“GO语言不固定参数函数与匿名函数如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GO语言不固定参数函数与匿名函数如何使用”文章能帮助大家解决问题。不固定参数函数在go语言中,...
    99+
    2023-07-05
  • C语言可变参数函数详解
    目录C语言可变参数函数总结C语言可变参数函数 C 语言允许定义参数数量可变的函数,这称为可变参数函数(variadic function)。这种函数需要固定数量的强制参数(manda...
    99+
    2022-11-12
  • GO语言不固定参数函数与匿名函数的使用
    目录不固定参数函数匿名函数 不固定参数函数 在go语言中,允许对函数设置不固定参数。不过需要注意的是,虽然不限制参数数量,但限制了参数的数据类型。 从原理分析,不固定参数利...
    99+
    2023-03-19
    GO语言不固定参数函数 GO语言 匿名函数
  • Go语言Slice作为函数参数的使用方法
    这篇文章主要讲解了“Go语言Slice作为函数参数的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言Slice作为函数参数的使用方法”吧!目录前言问题与解析典型问题其它疑问1其...
    99+
    2023-06-20
  • 详解Go语言Slice作为函数参数的使用
    目录前言问题与解析典型问题其它疑问1其它疑问2结论参考链接前言 首先要明确Go语言中实质只有值传递,引用传递和指针传递是相对于参数类型来说。 个人认为上诉的结论不对,把引用类型看做...
    99+
    2022-11-12
  • C语言可变长的参数列表详解
    C语言可变长的参数列表 C语言可创建接收参数个数不确定的函数。如常用的标准库函数printf就是一个接收参数个数可变的函数。函数printf至少要接收一个字符串作为它的第一个实参。但...
    99+
    2022-11-12
  • C语言中可变参数如何使用
    C语言中可变参数如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、什么是可变参数我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()...
    99+
    2023-06-17
  • 如何在Go语言中使用函数?
    Go语言是一种现代化的编程语言,它拥有高效的并发性能和强大的编译能力,越来越多的程序员开始使用它来开发软件。在Go语言中,函数是一种非常重要的概念,本篇文章将会介绍如何在Go语言中使用函数。 一、函数的定义 在Go语言中,函数的定义格式如下...
    99+
    2023-08-13
    数据类型 教程 函数
  • C语言函数参数怎么使用
    本篇内容主要讲解“C语言函数参数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言函数参数怎么使用”吧!一、函数参数函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值是函数调...
    99+
    2023-06-30
  • php函数如何用默认参数和可变长度参数方式传递
    这篇文章主要讲解了“php函数如何用默认参数和可变长度参数方式传递”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php函数如何用默认参数和可变长度参数方式传递”吧!向函数传递参数的方式有四种...
    99+
    2023-06-20
  • C语言的可变参数函数实现详解
    目录1、简介2、简单的使用方式总结1、简介 今天看到一个有趣的东西C语言的可变参数函数 众所周知,C语言的函数不能重载,那么你printf和scanf是怎么可以输入多个参数的 例如查...
    99+
    2022-11-12
  • GO语言中的存储函数:如何使用UNIX函数?
    在GO语言中,存储函数是一种特殊的函数,它们可以在数据库中执行,并返回一个结果。存储函数非常有用,因为它们可以简化代码,并且可以在数据库服务器上运行,从而减少网络传输和处理时间。本文将介绍如何在GO语言中使用UNIX函数来创建和调用存储函...
    99+
    2023-07-23
    unix 存储 函数
  • Go语言的sort包函数如何使用
    本篇内容主要讲解“Go语言的sort包函数如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言的sort包函数如何使用”吧!sort包简介官方文档Golang的sort包用来排序,二分...
    99+
    2023-06-30
  • C语言中变参函数传参的实现示例
    目录背景引入问题分析指针大小参数位置排布解决问题额外的测试总结参考资料背景引入 近期在看一本书,叫做《嵌入式C语言自我修养》,写的内容对我帮助很大,是一本好书。在第6章,GNU C编...
    99+
    2022-11-12
  • C语言可变参数与函数参数的内存对齐详解
    目录什么是可变参数?使用可变参数函数参数的内存对齐总结什么是可变参数? 有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数。 C 语言为这种情况提供了...
    99+
    2022-11-13
  • C语言函数的参数使用指针
    在c语言中实参和形参之间的数据传输是单向的“值传递”方式,也就是实参可以影响形参,而形参不能影响实参。指针变量作为参数也不例外,但是可以改变实参指针变量所指向的变量的值。 #in...
    99+
    2022-11-12
  • go语言如何通过函数改造函数
    在Go语言中,可以通过将函数作为参数传递给其他函数,或者将函数作为返回值,来实现函数的改造。1. 将函数作为参数传递给其他函数:可以...
    99+
    2023-10-12
    Go语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作