秒懂Golang匿名函数

上篇文章给大家介绍了go语言匿名函数的使用 需要的朋友点击查看。今天给大家介绍Golang匿名函数的相关知识,具体内容如下:

概念

所谓匿名函数,就是没有名字的函数

匿名函数(英语:Anonymous Function)在计算机编程中是指一类无需定义标识符(函数名)的函数或子程序,普遍存在于多种编程语言中。---wikipedia

Golang是支持匿名函数的,即在需要使用函数时,再定义函数,匿名函数没有函数名,只有函数体,函数可以被作为一种类型被赋值给函数类型的变量,匿名函数往往以变量方式被传递

匿名函数经常被用于实现回调函数,闭包等.

匿名函数定义
匿名函数的定义就是: 没有名字的普通函数

func (参数列表) (返回值列表) {
 函数体
}

匿名函数的两种使用方式

一、在定义匿名函数的时候就可以直接使用(这种方式只使用一次)

package main
import (
  "fmt"
)
func main(){
  res1 := func (n1 int, n2 int) int {
    return n1 + n2
  }(10, 30) //括号里的10,30 就相当于参数列表,分别对应n1和n2

  fmt.Println("res1=",res1)
}
D:\goproject\src\main>go run hello.go
res1= 40

二、将匿名函数赋给一个变量(函数变量),再通过该变量来调用匿名函数

package main
import (
  "fmt"
)
func main(){
  //将匿名函数fun 赋给变量test_fun
  //则test_fun的数据类型是函数类型,可以通过test_fun完成调用
  test_fun := func (n1 int, n2 int) int {
    return n1 - n2
  }

  res2 := test_fun(10, 30)
  res3 := test_fun(50, 30)
  fmt.Println("res2=", res2)
  fmt.Println("res3=", res3)
  fmt.Printf("%T", test_fun)
}
D:\goproject\src\main>go run hello.go
res2= -20
res3= 20
func(int, int) int

全局匿名函数

全局匿名函数就是将匿名函数赋给一个全局变量,那么这个匿名函数在当前程序里可以使用

package main
import (
  "fmt"
)

//Test_fun 就是定义好的全局变量
//全局变量必须首字母大写
var (
  Test_fun = func (n1 int, n2 int) int {
    return n1 - n2
  }
)
func main(){
  val1 := Test_fun(9, 7)

  fmt.Println("val1=", val1)
}
D:\goproject\src\main>go run hello.go
val1= 2

到此这篇关于秒懂Golang匿名函数的文章就介绍到这了,更多相关Golang匿名函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Golang记录、计算函数执行耗时、运行时间的一个简单方法

    先写一个公共函数, 比如在 common 包下有这么一个方法: // 写超时警告日志 通用方法 func TimeoutWarning(tag, detailed string, start time.Time, timeLimit float64) { dis := time.Now().Sub(start).Seconds() if dis > timeLimit { log.Warning(log.CENTER_COMMON_WARNING, tag, " detailed:&quo

  • Golang中文字符串截取函数实现原理

    在golang中可以通过切片截取一个数组或字符串,但是当截取的字符串是中文时,可能会出现的问题是:由于中文一个字不只是由一个字节组成,所以直接通过切片可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码. 例如: 想要截取前四个字 name := "我是胡八一" fmt.Println("name[:4] = ",name[:4]) 执行后得到的结果会是这样的: name[:4] = 我? 解决方法: 先将其转为[]rune,再截取后,转会string na

  • golang中strconv.ParseInt函数用法示例

    本文实例讲述了golang中strconv.ParseInt函数用法.分享给大家供大家参考,具体如下: golang strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大. 参数1 数字的字符串形式 参数2 数字字符串的进制 比如二进制 八进制 十进制 十六进制 参数3 返回结果的bit大小 也就是int8 int16 int32 int64 func ParseInt(s string, base int, bitSize int) (i int64, err erro

  • golang模板template自定义函数用法示例

    本文实例讲述了golang模板template自定义函数用法.分享给大家供大家参考,具体如下: golang的模板十分强大,其中的unix管道风格函数调用很是喜欢. 模板中有很多内置可以参看pkg文档, 另外还可以实现自定义函数. 例子如下: 复制代码 代码如下: package main import (     "text/template"     "time"     "os" ) type User struct {     Usern

  • Golang的os标准库中常用函数的整理介绍

    os.Rename()这个函数的原型是func Rename(oldname, newname string) error,输入的是旧文件名,新文件名,然后返回一个error其实这个函数的真正实现用的syscall.Rename()然后通过MoveFile(from *uint16, to *uint16) (err error) = MoveFileW来重新命名 复制代码 代码如下: import (  "fmt"  "os" ) func main() {  e

  • 秒懂Golang匿名函数

    上篇文章给大家介绍了go语言匿名函数的使用 需要的朋友点击查看.今天给大家介绍Golang匿名函数的相关知识,具体内容如下: 概念 所谓匿名函数,就是没有名字的函数 匿名函数(英语:Anonymous Function)在计算机编程中是指一类无需定义标识符(函数名)的函数或子程序,普遍存在于多种编程语言中.---wikipedia Golang是支持匿名函数的,即在需要使用函数时,再定义函数,匿名函数没有函数名,只有函数体,函数可以被作为一种类型被赋值给函数类型的变量,匿名函数往往以变量方式被传

  • 详解golang defer 闭包 匿名函数

    目录 defer的触发时机 defer,return,返回值的执行顺序 闭包与匿名函数 defer用于资源的释放,会在函数返回之前进行调用.如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用. defer的触发时机 包裹着defer语句的函数返回时 包裹着defer语句的函数执行到最后时 当前goroutine发生Panic时 当前goroutine发生Panic时 //输出结果:return前执行defer func f1() { defer fmt.Printl

  • PHP回调函数与匿名函数实例详解

    本文实例讲述了PHP回调函数与匿名函数.分享给大家供大家参考,具体如下: 回调函数和匿名函数 回调函数.闭包在JS中并不陌生,JS使用它可以完成事件机制,进行许多复杂的操作.PHP中却不常使用,今天来说一说PHP中中的回调函数和匿名函数. 回调函数 回调函数:Callback (即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用. 通俗的解释就是把函数作为参数传入进另一个函数中使用:PHP中有许多 "需求参数为函数"

  • Javascript 匿名函数及其代码模式原理

    关于什么是匿名函数,及它带来的优势在本文就不深究了,先抛出一个常用的匿名函数: (function(){alert('yo')})() 很多同学知道怎么用这种匿名函数,却或许并不明白为什么这样写就能够调用匿名函数.也许知道后面的圆括号是执行前面的函数,而并不清楚前面的圆括号具有何种含义!本文将带你了解匿名函数的代码模式原理. OK,先来看看更多匿名函数调用模式: 复制代码 代码如下: (function(){alert(1);}()) (function(){alert(2);})() void

  • js中匿名函数的创建与调用方法分析

    本文实例分析了js中匿名函数的创建与调用方法.分享给大家供大家参考.具体实现方法如下: 匿名函数就是没有名字的函数了,也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值,很多新手朋友对于匿名函数不了解.这里就来分析一下. function 函数名(参数列表){函数体;} 如果是创建匿名函数,那就应该是: function(){函数体;} 因为是匿名函数,所以一般也不会有参数传给他. 为什么要创建匿名函数呢?在什么情况下会使用到匿

  • 详谈JavaScript 匿名函数及闭包

    1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这也是最常规的一种 复制代码 代码如下: function double(x){     return 2 * x;   } 第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用. 复制代码 代码如下: var double = new Functio

  • 全面了解JS中的匿名函数

    一.声明: 1. 正常函数声明: //正常函数声明 function foo(p1, p2){ return p1+p2; } 2. 匿名函数声明: //匿名函数声明 var foo= function(p1, p2){ return p1+p2; } 二.返回值: 匿名函数的返回值是一个Function对象的引用. 三.含义: 上述匿名函数代码的含义为将Function对象的一个引用赋值给变量foo. 四.相同点: 生成一个没有名称的函数体(Function对象)之后,再赋予其一个名称. 以上

  • JavaScript 匿名函数(anonymous function)与闭包(closure)

    引入 匿名函数 闭包 变量作用域 函数外部访问函数内部的局部变量 用闭包实现私有成员 引入 闭包是用匿名函数来实现.闭包就是一个受到保护的变量空间,由内嵌函数生成."保护变量"的思想在几乎所有的编程语言中都能看到. 先看下 JavaScript 作用域: JavaScript 具有函数级的作用域.这意味着,不能在函数外部访问定义在函数内部的变量. JavaScript 的作用域又是词法性质的(lexically scoped).这意味着,函数运行在定义它的作用域中,而不是在调用它的作用

  • 举例讲解Python的lambda语句声明匿名函数的用法

    所谓匿名函数,即是不需要定义函数,像表达式一样使用,不需要函数名(很多时候名字让我很困扰),一些简单的函数简单化, 举个例子 我需要两个整数相加的函数,通常是这么定义的 def add(x, y): return x + y 很好的完成了我需要的功能, 但是我现在需要一个数字与字符串相加的函数 def addstr(x, y): return x + str(y) 又一次完成了我的需求,但是 我突然需要两个整数相减,相除的功能这样函数就得 一直写下去, 但是使用lambda 匿名函数可以直接使用

  • js中匿名函数的N种写法

    匿名函数没有实际名字,也没有指针,怎么执行滴? 其实大家可以看看小括号的意义就应该可以理解.小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括号的返回值,不难理解 (function(){})()可以将没有名字的函数执行了把- 关于匿名函数写法,很发散~ 最常见的用法: 复制代码 代码如下: (function() { alert('water'); })(); 当然也可以带参数: 复制代码 代码如下: (function(o) { alert

随机推荐