匿名函数 | 学习笔记

简介: 简介:快速学习匿名函数

开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map :匿名函数】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9606


匿名函数

 

目录

一、 介绍

二、 匿名函数使用方式1

三、 匿名函数使用方式2

四、 全局匿名函数


一、介绍

Go 支持匿名函数,匿名函数就是没有名字的函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用。匿名函数出现在很多的编程语言中,一般情况下函数都是有名字的。

 

二、匿名函数使用方式1

1、在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次。调用过后就不可以再次调用了,匿名函数没有名字,也没有给匿名函数变量。有时候并不希望定义函数,只想调用函数,这时候就可以用匿名函数。

2、案例说明:

package main

import (

"fmt"

)

func main() {

//在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次

//案例演示,求两个数的和,使用匿名函数的方式完成

res1 := func (n1 int, n2 int) int i

return n1 + n2

}(10,20)

fmt.Println( "res1=", res1)

}

3、代码说明:

第一种调用方式在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次。求两个数的和,使用匿名函数的方式完成,n1 int,n2 int 返回一个 int,返回n1+n2。直接在后面输入 n1,n2用一个变量来接收。在定义匿名函数时就传参了。输出结果 fmt.Println( "res1=", res1) res1=30,结果相符。

 

三、匿名函数使用方式2

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

2、案例说明:

package main

import (

"fmt"

)

func main() {

//在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次

//案例演示,求两个数的和,使用匿名函数的方式完成

res1 := func (n1 int, n2 int) int {

return n1 +n2

}(10,20)

fmt.Println( "res1=", res1)

//将匿名函数func (n1 int, n2 int) int赋给a变量

//则a的数据类型就是函数类型,此时,我们可以通过a完成调用

a:= func (n1 int, n2 int) int i

return nl1- n2

I

res2 := a( 10,30)

fmt.Println( "res2=", res2)

res3 := a(90,30)

fmt.Println( "res3=", res3)

}

3、结果输出:

res1= 30

res2=-20

res3=60

4、代码分析

求两个数的差,将匿名函数 func (n1 int, n2 int) int 赋给 a 变量则 a 的数据类型就是函数类型,此时,可以通过 a 完成调用,res2 :=a(10,30),a 可以反复调用,但 a 不是函数名。将定义的匿名函数交给一个变量,通过变量完成调用。在某些情况下用这种函数可以完成特殊的需求。

 

四、全局匿名函数

1、如果将匿名函数赋给一个全局变量,那么这个匿名函数,就成为一个全局匿名函数,可以在程序有效。

var (

//fun1就是一个全局匿名函数

Fun1 = func (n1 int, n2 int) int f

return n1 * n2

}

)

//全局匿名函数的使用

res4 :=Fun1(4,9)

fmt.Println(res4=,res4)

2、代码解析:

交给一个变量,Fun1为全局匿名函数对应的变量,把匿名函数交给全局变量,此时Fun1就是一个全局匿名函数,在整个程序都是有效的。全局匿名函数的使用,res4 :=Fun1(4,9) fmt.Println(res4=,res4)

结果输出36。

在实际的开发中,用的比较多的是匿名函数使用方式1。

相关文章
|
Java
正则表达式基本使用
正则表达式基本使用
657 0
正则表达式基本使用
|
传感器 数据可视化 人机交互
虚拟现实(VR)与增强现实(AR)技术解析
【6月更文挑战第27天】 VR创造沉浸式虚拟环境,模拟真实感受,应用于旅游、医疗、教育和游戏。AR将虚拟信息叠加到现实,强调虚实结合与实时交互,常见于游戏、教育、购物和医疗。两者提供超越现实的体验,随着技术进步,将在更多领域发挥作用,开启新可能。
|
Java 编译器 Serverless
Java 原生化的未来 Graal AOT 编译器
使用 Graal 编译器对 Java 程序进行 AOT 编译使其适合 Serverless 场景。
251 0
Java 原生化的未来 Graal AOT 编译器
|
JavaScript Java 测试技术
基于微信小程序的在线点餐的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的在线点餐的设计与实现(源码+lw+部署文档+讲解等)
141 1
|
JavaScript 前端开发 C++
CocosCreator3.8研究笔记(六)CocosCreator 脚本装饰器的理解
CocosCreator3.8研究笔记(六)CocosCreator 脚本装饰器的理解
401 0
|
Unix Linux iOS开发
在EMAS上,您可以使用脚本来获取build.gradle文件中的versionName
在EMAS上,您可以使用脚本来获取build.gradle文件中的versionName
123 7
|
机器学习/深度学习 传感器 自动驾驶
自动驾驶技术3
自动驾驶技术3
171 1
|
前端开发 JavaScript API
“构建完善的用户认证与数据交互系统“
“构建完善的用户认证与数据交互系统“
199 0
|
人工智能 自然语言处理 自动驾驶
破壁人AI百度:科技公司反内卷的典型样本
科技的未来,不是消费互联网,而是产业互联网。 黄奇帆在中国互联网大会上斩钉截铁地说,“今后十年是产业互联网时代”。互联网的未来是产业互联网,产业互联网的价值以及远景是怎样的?2021年8月18日的百度世界大会,告诉我们关于未来的某些可能性,从某种意义上来说,百度正在扮演着中国科技的“破壁人”角色。
破壁人AI百度:科技公司反内卷的典型样本
|
设计模式
面试官问我什么是责任链模式,我把这篇文章甩给了他
面试官问我什么是责任链模式,我把这篇文章甩给了他
面试官问我什么是责任链模式,我把这篇文章甩给了他