GO语言不固定参数函数与匿名函数的使用

作者:White--Night 时间:2024-02-17 14:42:17 

不固定参数函数

在go语言中,允许对函数设置不固定参数。不过需要注意的是,虽然不限制参数数量,但限制了参数的数据类型。

从原理分析,不固定参数利用了切片的解包。切片(或称动态数组)的详细用法可去了解下切片的相关知识点。

不固定参数的应用实例如下

package main

import "fmt"

func test(numbers ...interface{}) {
   for _, k := range numbers {
       fmt.Printf("%v\n", k)
   }
}
func main() {
   var name = []string{"Alice", "Bob"}
   var m = map[string]interface{}{"name": "Alice", "age": 10}
   test(10, "Bob", name, m)
}

在上面这段程序中,我们先来看看main函数。可以看到,我们向test中分别传入了四个不同类型的变量:整型,字符串,切片和接口(interface)(接口也是一种数据类型,当然可以作为参数传递)。

再看看test函数,我们定义了一个接口类型的变量numbers,用“..."来代表”我们不确定这个函数要接收多少参数,所以用...来表示我们要接受n个参数”。不过我们传进去的参数类型还是不变的,将%v改成%T看看类型就知道了,结果为

int
string                 
[]string               
map[string]interface {}

当然,是因为我们往函数里传了四个不同类型的参数,才需要将函数变量定义为接口类型。假设我们传的都是单一类型的变量就就不用了。例子如下

package main

import "fmt"

func test(numbers ...int) {
   for _, k := range numbers {
       fmt.Printf("%v\n", k)
   }
}
func main() {
   test(1, 2, 3, 4)
}

运行结果为 

1
2
3
4

匿名函数 

Go语言中,函数可以没有具体的函数名,并将整个函数作为变量去使用。使用方法有两种:函数定义并使用,函数以函数变量表示。

其实就是把这个函数执行后的返回值当作变量去用,相当于先执行一次该函数,再把该函数的返回值去赋给其他变量或当作参数去传入函数。比较简单,使用例如下。

package main

import "fmt"

func testTwo(tmp int) int {
   return tmp * 3
}
func main() {
   test := func(tmp int) int {
       return tmp * 2
   }

fmt.Printf("%v\n", test(10))
   fmt.Printf("%v\n", testTwo(test(10)))
}

来源:https://blog.csdn.net/white_night_SZTU/article/details/129558907

标签:GO语言,不固定参数函数,匿名函数
0
投稿

猜你喜欢

  • Vue中导入excel文件的两种方式及使用步骤

    2024-05-21 10:16:20
  • Django中使用Celery的教程详解

    2023-07-12 05:08:35
  • MySQL安全性指南(3)(转)

    2010-07-26 13:07:00
  • SQL+HTML+PHP 一个简单论坛网站的综合开发案例(注册、登录、注销、修改信息、留言等)

    2023-06-14 15:54:17
  • 深入探究Go语言从反射到元编程的实践与探讨

    2024-05-22 10:28:50
  • SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验)

    2024-01-15 00:18:11
  • css利用锚点控制翻页

    2008-07-17 13:12:00
  • JavaScript链式调用的设计

    2009-12-04 12:46:00
  • 纯JS单页面赛车游戏制作代码分享

    2024-02-23 14:10:17
  • python对文档中元素删除,替换操作

    2023-08-30 11:28:20
  • HTML5 的五个激动人心的特性

    2009-01-02 17:36:00
  • MySQL慢sql优化思路详细讲解

    2024-01-18 03:51:43
  • 超常用的PHP正则表达式收集整理

    2024-05-03 15:35:57
  • Windows 2003服务器上传文件受限制的解决方法

    2011-02-14 11:29:00
  • 用python实现将数组元素按从小到大的顺序排列方法

    2022-01-07 22:03:25
  • MySQL ALTER命令使用详解

    2024-01-18 09:40:23
  • Scrapy-Redis结合POST请求获取数据的方法示例

    2023-08-25 06:31:56
  • Python Django 封装分页成通用的模块详解

    2023-06-24 13:56:15
  • python实现图像识别功能

    2023-08-09 08:45:00
  • Go语言实现简单的一个静态WEB服务器

    2024-04-28 09:12:56
  • asp之家 网络编程 m.aspxhome.com