首页 > 其他分享 >一文简单了解函数类型

一文简单了解函数类型

时间:2023-09-10 10:22:52浏览次数:35  
标签:return 一文 int add func 类型 函数

1. 引言

函数在Go语言中是属于一等公民,基于此,本文将简单介绍下Go语言中的函数类型,了解下其具体用法,
为后续了解函数类型的具体用途打下基础。

2. 函数类型说明

2.1 什么是函数类型

Go中,函数是一等公民,这意味着你可以直接使用函数类型,是Go语言的一种内置类型,具有以下通用形式:

func(param1, param2, ...) returnType

其中,param1, param2, ... 是函数的参数列表,returnType 是函数的返回值类型。我们可以直接使用这种函数类型,声明变量、作为参数传递给其他函数,或作为函数的返回值返回。

2.2 使用说明

2.2.1 赋值给变量

可以将函数赋值给变量,然后使用该变量来调用函数。这使得函数可以像其他数据类型一样进行传递和存储。

// 1. 函数可以直接赋值给变量
var add func(int, int) int

add = func(a, b int) int {
    return a + b
}
result := add(5, 3) // 调用函数类型变量

2.2.2 作为参数传递给其他函数

可以将函数作为参数传递给其他函数,这使得回调函数和高阶函数的实现变得非常简单。

func calculate(a, b int, operation func(int, int) int) int {
    return operation(a, b)
}

func myFunc(a, b int) int {
    return a + b
}

sum := calculate(3, 4, myFunc) // 将函数作为参数传递

2.2.3 作为其他函数的返回值

可以在函数内部定义并返回函数,这对于实现工厂函数或闭包非常有用。

func getCalculator() func(int, int) int {
    return func(a, b int) int {
        return a * b
    }
}

calculator := getCalculator() // 获取一个返回的函数
result := calculator(3, 4)   // 调用返回的函数

2.2.4 存储在数据结构中

可以将函数存储在数据结构中,如切片、映射或结构体字段中,以实现各种复杂的逻辑。

type Operation func(int, int) int

operations := map[string]Operation{
    "add":    func(a, b int) int { return a + b },
    "subtract": func(a, b int) int { return a - b },
}

result := operations["add"](3, 4) // 从映射中获取并调用函数

2.3 函数类型别名

通常情况下,我们会给函数类型起一个别名,从而增加代码的可读性和可维护性。通过为函数类型起别名,可以为该类型提供一个更有意义的名称,使代码更加自文档化。例如:

type Calculator func(int, int) int

add := Calculator(func(a, b int) int {
    return a + b
})

result := add(5, 3)

在上面的示例中,通过给函数类型起别名Calculator,我们可以更容易地理解add变量的作用,即它是一个用于执行计算的函数类型。    虽然不是必须的,但这种方式可以使代码更具可读性,特别是在处理复杂的函数类型时。它还有助于将函数类型的声明和使用隔离开来,使代码更易于维护和修改。

3. 总结

本文简单介绍了函数在Go语言中是一等公民,基于此,Go语言中的函数拥有了更多的能力,不再需要依附在类上。

相对于其他函数非一等公民的语言,在Go语言中,函数可以直接赋值给变量,作为其他函数的返回值,也可以作为参数传递进去等,总体来说更加灵活。

同时我们也介绍了常情况下,我们会给函数类型起一个别名,从而增加代码的可读性和可维护性。
基于此来对函数类型进行了一个简单的介绍,希望对你有所帮助。

标签:return,一文,int,add,func,类型,函数
From: https://www.cnblogs.com/chenjiazhan/p/17690844.html

相关文章

  • 10.3 注意力评分函数
    1.torch.bmm()的用法先说一般的矩阵乘法torch.mm()。torch.mm()用于将两个二维张量(矩阵)相乘,求它们的叉乘结果。如: 我们创建一个2*3的矩阵A,3*4的矩阵B,它们的值都初始化为均值为0方差为1的标准正态分布,用torch.mm()求它们的叉乘结果:importtorchfromtorchimportnnfromd......
  • auto 类型
    auto类型说明符1、C++11标准引入了auto类型说明符,用它能让编译器主动去分析表达式所属的类型。2、auto定义变量必须有初始值,编译器通过初始值来推算变量的类型。3、可以在一条语句中用auto声明多个变量,但要求该语句中所有变量的初始值的基本数据类型都必须一样。(注意*和&并非基......
  • C语言:数据类型之整形(一)
     什么是数据?记录一天各个时间的温度,那么这个温度就是数据.记录一个水库水位的变化值,那么这个值就是数据.什么是数据类型?1215是整数12.23是小数"helloworld"是一段话基本数据类型:数值类型:整形,浮点型。整形顾名思义就是整数,像:1,2,3,4,5就是整形整形在C语言的关键字是:int......
  • Go类型全解:常量与变量大全!
    本篇文章深入探讨了Go语言中类型确定值、类型不确定值以及对应类型转换的知识点,后续充分解析了常量与变量及其高级用法,并举出丰富的案例。关注公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,......
  • 无涯教程-JavaScript - OCT2HEX函数
    描述OCT2HEX函数将八进制数转换为十六进制。语法OCT2HEX(number,[places])争论Argument描述Required/OptionalNumber您要转换的八进制数。数字不得超过10个八进制字符(30位)。数字的最高有效位是符号位。其余的29位是幅度位。负数使用二进制补码表示。Required......
  • 无涯教程-JavaScript - OCT2DEC函数
    描述OCT2DEC函数将八进制数转换为十进制数。语法OCT2DEC(number)争论Argument描述Required/OptionalNumber您要转换的八进制数。数字不得超过10个八进制字符(30位)。数字的最高有效位是符号位。其余的29位是幅度位。负数使用二进制补码表示。RequiredNotes如......
  • 教你快速上手C语言中的数据类型和变量
    (章节目录)前言  哈喽,各位铁汁们好啊!✨今天来给大家带来的是初识C语言里面的数据类型和变量。  今天主要带大家简单认识-一下C语言,俗话说没吃过猪肉,也见过猪跑。了解下每个数据类型是干嘛的。可以读懂C语言的简单程序,其他的博主就不多介绍了。  后面会为大家详细介绍......
  • 无涯教程-JavaScript - OCT2BIN函数
    描述OCT2BIN函数将八进制数转换为二进制数。语法OCT2BIN(number,[places])争论Argument描述Required/OptionalNumber您要转换的八进制数。数字不能超过10个字符。数字的最高有效位是符号位。其余的29位是幅度位。负数使用二进制补码表示。RequiredPlaces要......
  • 封装的思考(快捷键Alt+insert很重要,千万记住,它还能构造函数)
      这边就是封装的意义,然后操作方式和C++没差多少 然后这里是java封装的语法,看看和C++的区别 接着就是一些快捷键的使用  ......
  • bind函数的封装实现
    import{call}from'./call'/*自定义函数对象的bind方法bind(obj):返回一个新的函数,新函数内部会调用原来的函数,且this为bind()指定的第一参数的值*/exportfunctionbind(fn,obj,...args){console.log('bind()')//返回一个新函数return(...args2)......