您的位置:首页 > 教程笔记 > 综合教程

golang函数指针的原理和应用

2024-04-29 16:02:50 综合教程 34

go 中函数指针允许将函数作为值存储。创建方式包括直接赋值和使用 func 关键字。通过 () 运算符调用。实战应用示例:计算数组中奇数元素的和,通过函数指针传递奇数判断函数。

Go 语言函数指针的原理和应用 函数指针的原理

在 Go 语言中,函数是一个值,可以使用变量来存储。函数指针是一种指向函数的变量。它使用 前缀表示,语法如下:

type FuncType func(args) (returns)
var funcPtr *FuncType
创建函数指针

函数指针可以通过以下几种方式创建:

    直接赋值:

    var add = func(a, b int) int {
        return a + b
    }
    var addPtr = &add

    使用 关键字:

    var addPtr = func(a, b int) int {
        return a + b
    }
    调用函数指针

    要调用函数指针,需要使用 运算符,如下所示:

    result := (*addPtr)(1, 2)  // 等于 add(1, 2)
    实战案例:

    计算数组中奇数元素的和

    package main
    
    import "fmt"
    
    // 奇数函数
    func isOdd(x int) bool {
        return x%2 != 0
    }
    
    // 计算奇数和
    func sumOdds(arr []int, odd func(int) bool) int {
        sum := 0
        for _, v := range arr {
            if odd(v) {
                sum += v
            }
        }
        return sum
    }
    
    func main() {
        arr := []int{1, 2, 3, 4, 5, 6, 7}
        total := sumOdds(arr, isOdd)
        fmt.Println("奇数元素的和:", total)
    }

    输出:

    奇数元素的和: 16

相关推荐

  • C++ 函数指针与函数对象:解锁代码的隐藏潜力

    C++ 函数指针与函数对象:解锁代码的隐藏潜力

    c++++ 函数指针指向函数,允许通过指针调用函数。函数对象是重载了 operator() 操作符的类或结构,可像函数一样被调用。它们在使用回调函数时很有用,回调函数是传递给另一个函数作为参数的函数。

    综合教程 2024-04-29 16:02:49 52
  • C++ 成员函数详解:对象方法在设计模式中的应用

    C++ 成员函数详解:对象方法在设计模式中的应用

    c++++ 成员函数在设计模式中的应用包括:封装数据、避免重复代码和提高可测试性。实战案例中,工厂模式通过成员函数实现:抽象产品接口定义共同行为,具体产品类实现具体行为,工厂根据类型创建产品,客户使用

    综合教程 2024-04-29 16:02:48 161
  • golang匿名函数的用法

    golang匿名函数的用法

    匿名函数在 go 中没有名称,可作为参数传递给其他函数。用法:语法:func([参数列表]) ([返回值列表]) { // 函数体 }可省略参数和返回值。可直接传递给其他函数。实战案例:排序列表时,可

    综合教程 2024-04-29 16:02:45 190
  • mysql存储过程和函数有什么区别

    mysql存储过程和函数有什么区别

    MySQL 存储过程与函数的区别简介存储过程和函数是 MySQL 中存储的代码块,用于执行特定任务或向数据库查询数据。虽然两者都提供了对数据库操作的封装,但它们在用途和语法上存在以下关键区别:1. 用

    综合教程 2024-04-24 20:07:45 63
  • C++ 函数中引用参数和指针参数的高级用法

    C++ 函数中引用参数和指针参数的高级用法

    c++++ 函数中的引用参数(本质为变量别名,修改引用修改原始变量)和指针参数(存储原始变量的内存地址,通过解引用指针修改变量)在传递和修改变量时有着不同的用法。引用参数常用于修改原始变量(尤其是大型

    综合教程 2024-04-24 19:36:08 120