• go语言学习之旅之Go语言函数


    学无止境,今天继续学习go语言的基础内容

    Go语言函数

    Go 语言函数定义格式如下

    func function_name( [parameter list] ) [return_types] {
       函数体}
    
    • 1
    • 2

    函数定义解析

    • func:函数由 func 开始声明

    • function_name:函数名称,函数名和参数列表一起构成了函数签名。

    • parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。

    • return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。

    • 函数体:函数定义的代码集合

    在Go语言中,函数是一种重要的代码组织方式。以下是Go语言中定义和使用函数的基本知识:

    函数定义

    package main
    
    import "fmt"
    
    // 函数的定义
    func add(x int, y int) int {
        return x + y
    }
    
    // 函数可以返回多个值
    func swap(x, y string) (string, string) {
        return y, x
    }
    
    // 函数可以有命名返回值
    func divide(dividend, divisor int) (result int, remainder int) {
        result = dividend / divisor
        remainder = dividend % divisor
        return
    }
    
    // 可变参数函数
    func sum(numbers ...int) int {
        total := 0
        for _, num := range numbers {
            total += num
        }
        return total
    }
    
    func main() {
        // 调用函数
        sum := add(3, 4)
        fmt.Println("3 + 4 =", sum)
    
        // 调用返回多个值的函数
        a, b := swap("hello", "world")
        fmt.Println(a, b)
    
        // 调用有命名返回值的函数
        result, remainder := divide(10, 3)
        fmt.Printf("Result: %d, Remainder: %d\n", result, remainder)
    
        // 调用可变参数函数
        total := sum(1, 2, 3, 4, 5)
        fmt.Println("Sum:", total)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    函数特性

    1. 参数传递: Go语言中的函数参数是传值的,但可以通过传递指针来实现引用传递。

    2. 多返回值: 函数可以返回多个值,这使得Go语言中处理错误信息变得更加方便。

    3. 命名返回值: 函数可以指定命名返回值,使得函数体内可以直接使用这些名称,最后通过return语句返回。

    4. 可变参数: 使用...语法,函数可以接受可变数量的参数。

    5. 匿名函数: 可以在函数内定义匿名函数,也可以将函数作为值赋给变量。

    6. 闭包: Go语言支持闭包,可以在函数内部定义函数,并访问外部函数的局部变量。

    下面是一个示例,演示了匿名函数和闭包的使用:

    package main
    
    import "fmt"
    
    func main() {
        // 匿名函数
        add := func(x, y int) int {
            return x + y
        }
    
        result := add(3, 4)
        fmt.Println("3 + 4 =", result)
    
        // 闭包
        multiplier := func(factor int) func(int) int {
            return func(x int) int {
                return x * factor
            }
        }
        // 创建两个闭包
    
        double := multiplier(2)
        triple := multiplier(3)
        // 使用 闭包
        fmt.Println("Double of 5:", double(5))
        fmt.Println("Triple of 5:", triple(5))
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在Go语言中,闭包(closure)是指一个函数值(function value)捕获并且绑定到了其函数体之外的变量。这允许这个函数值访问捕获的变量,即使这些变量在函数体外部定义。

    闭包通常用于实现函数式编程的概念,它可以让函数具有状态(通过捕获变量)并在函数之间共享这些状态。
    在这个例子中,multiply 是一个外部函数,它返回一个内部函数。内部函数可以访问外部函数的参数 x,并且每个返回的内部函数都捕获了不同的值 x。当我们调用 multiply(2) 和 multiply(3) 创建两个闭包时,它们分别捕获了不同的 x 值,因此 double 和 triple 具有不同的行为。

    闭包在许多场景中都很有用,例如在事件处理、回调函数和并发编程中。通过捕获变量,闭包可以在函数之间传递状态,这在某些情况下比传统的函数调用更为方便。

    这些都是Go语言中函数的基本概念和用法。函数是Go语言中的一等公民,提供了丰富的功能和灵活性

  • 相关阅读:
    [unity3D]什么是预制体(Prefab)?如何制作预制体?如何导出预制体?预制体变体是什么?
    基于yolov5的车辆行人道路检测
    C++ 11 右值与完美转发
    Windows server 由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开。
    element ui多选框(Checkbox 多选框、Select多选框)编辑时无法选中的解决办法
    Unexpected tokens (use ‘;‘ to separate expressions on the same line)
    解决Devops部署Java应用中文乱码
    并发编程之深入理解CAS
    Error: [vuex] do not mutate vuex store state outside mutation handlers.
    LOTO虚拟示波器 关于触发灵敏度功能
  • 原文地址:https://blog.csdn.net/qq_43406318/article/details/134536128