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

阿橙
阿橙
发布时间:2026-10-15| 6人浏览过
原创

本文介绍Go语言中两种常用函数特性:不固定参数和匿名函数。通过示例讲解如何利用...语法接收多个不同类型的参数,以及如何将函数作为变量定义和传递。

不固定参数函数

在 Go 语言中,允许定义接受不固定数量参数的函数。虽然参数数量没有限制,但编译器会要求这些参数必须是相同的基数据类型。该机制底层依赖于对切片的解包操作。当传入的参数类型不一致时,可以使用 interface{}(即空接口)作为承载类型。

第1步:处理混合类型的参数

目的:演示如何在同一函数调用中传递整型、字符串、切片和字典等不同类型的值。

为了容纳所有可能的输入类型,我们将参数定义为 []interface{}。在 main 函数中,我们构建了包含不同结构的测试数据:

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

执行上述代码后,由于使用了通用占位符 %v,输出结果仅显示数值内容:

10
Bob
[Alice Bob]
map[name:Alice age:10]

若需明确验证传入参数的具体数据类型,可将格式化符号更改为 %T。运行结果展示了每种变量的真实形态:

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

第2步:处理同类型的参数

目的:优化代码结构,当确定所有参数均为同一类型时,直接使用对应类型的切片接收。

如果传入的都是整型数据,直接在函数签名中指定类型为 ...int。这种写法比使用 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 语言中的函数是一等公民,它们可以没有具体的名称,可以直接定义并赋值给变量,或者作为实参传递给其他函数。这使得我们可以将一段逻辑的执行结果直接当作普通变量来使用。

第3步:定义内联函数并进行嵌套调用

目的:展示如何定义一个匿名函数,将其存储于变量中,并与具名函数进行配合。

下面例子中,我们先定义了一个标准的具名函数 testTwo。随后在 main 作用域内,直接使用 func 关键字创建了一个匿名函数并将其赋值给同名变量 test。此时,test 的行为就像一个常规函数:

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

在此场景中,test(10) 返回 20。接着这个返回值被传入到外层调用 testTwo 中,最终计算结果为 60。通过这种方式,匿名函数实现了快速定义短小逻辑片段的目的。

以上就是 GO 语言不固定参数函数与匿名函数的详细内容,更多关于 GO 语言函数特性的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。