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

 更新时间:2023年03月17日 10:56:48   作者:White--Night  
本文主要介绍了GO语言不固定参数函数与匿名函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

不固定参数函数

在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)))
}

到此这篇关于GO语言不固定参数函数与匿名函数的使用的文章就介绍到这了,更多相关GO语言不固定参数函数与匿名函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用golang-unsafe包的注意事项及说明

    使用golang-unsafe包的注意事项及说明

    这篇文章主要介绍了使用golang-unsafe包的注意事项及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Go的固定时长定时器和周期性时长定时器

    Go的固定时长定时器和周期性时长定时器

    本文主要介绍了Go的固定时长定时器和周期性时长定时器,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 使用Go语言实现xmind文件转换为markdown

    使用Go语言实现xmind文件转换为markdown

    这篇文章主要来和大家一起深入探讨如何用Go语言构建一个强大的命令行工具,实现XMind到Markdown的无损转换,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-06-06
  • Go container包的介绍

    Go container包的介绍

    这篇文章主要介绍了Go container包,go语言container包中有List和Element容器ist和Element都是结构体类型。结构体类型有一个特点,那就是它们的零值都会是拥有其特定结构,但没有任何定制化内容的值,相当于一个空壳,下面一起进文章来了解具体内容吧
    2021-12-12
  • Go语言关于几种深度拷贝(deepcopy)方法的性能对比

    Go语言关于几种深度拷贝(deepcopy)方法的性能对比

    这篇文章主要介绍了Go语言关于几种深度拷贝(deepcopy)方法的性能对比,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Go目录文件路径操作的实现

    Go目录文件路径操作的实现

    在Go语言中,可以使用绝对路径或相对路径来表示文件路径,本文就来介绍一下Go目录文件路径操作,感兴趣的可以了解一下
    2023-10-10
  • golang中的select关键字用法总结

    golang中的select关键字用法总结

    这篇文章主要介绍了golang中的select关键字用法总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Go设计模式之备忘录模式图文详解

    Go设计模式之备忘录模式图文详解

    备忘录模式是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态,本文主要通过一些图片来给大家介绍一下Go的备忘录模式,需要的朋友可以参考下
    2023-08-08
  • Go语言中interface的两大用法详解

    Go语言中interface的两大用法详解

    文章主要介绍了Go语言中interface的两大用法:一是作为方法的集合,定义了一套规范/约定;二是泛型的通用效果解耦合,谁都不依赖谁,还详细解释了空接口interface{}(万能类型)的应用场景,最后强调了必须实现第三方给的接口,才能调用其功能
    2026-05-05
  • 一篇文章学会GO语言中的变量

    一篇文章学会GO语言中的变量

    Go语言是静态类型语言,因此变量有明确类型的,编译器也会检查变量类型的正确性,下面这篇文章主要给大家介绍了关于GO语言中变量的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07

最新评论