返回顶部
首页 > 资讯 > 后端开发 > GO >Golang函数这些神操作你知道哪些
  • 848
分享到

Golang函数这些神操作你知道哪些

Golang函数操作Golang函数Go函数 2023-02-16 18:02:37 848人浏览 安东尼
摘要

「1. 用type关键字可以定义函数类型,函数类型变量可以作为函数的参数或返回值。」 package main import "fmt" func add(a, b int) i

「1. 用type关键字可以定义函数类型,函数类型变量可以作为函数的参数或返回值。」

package main

import "fmt"

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

func sub(a, b int) int {
 return a - b
}

type Task func(int, int) int

func exec(t Task, a, b int) int {
 return t(a, b)
}

func main() {
 a := exec(add, 10, 20)
 fmt.Println(a)

 b := exec(sub, 100, 95)
 fmt.Println(b)
}

解析:type Task func(int, int) int,这句是说,使用type关键字定义1个类型为func的Task,这个func有2个int形参、1个int返回值。再看exec这个函数,它有3个形参,形参t的类型是刚定义的函数类型Task,另外两个你懂的,我就不说了。

「2. 匿名函数的玩法是真的骚,看看骚在哪里」

栗子1:匿名函数可以直接赋给变量

func main() {
 var aaa = func(a, b int) int {
  return a + b
 }
 ret := aaa(89, 78)
 fmt.Println(ret)
}

输出:

167

栗子2:匿名函数作为函数入参

这个例子感觉跟刚才使用type关键字定义函数类型的例子有点相同的赶脚,仔细一看,好像也只是在使用的方式上是一样,定义函数的套路又是不同的。

func work(f func(int, int) int, a, b int) int {
 return f(a, b)
}

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

func main() {
 a := work(add, 100, 200)
 fmt.Println(a)
}

输出:

300

解析:形参f的类型就是匿名函数,继续看func(int, int) int,这个匿名函数接收两个int形参,返回值也是int类型。另外两个形参a和b,也是int,想必你懂了,我就不废话了。

栗子3:匿名函数作为函数出参

匿名函数作为函数出参(作为函数返回值),经不断调测,有3种骚包玩法

骚包玩法1

// 先来个简单的
func work() func() int {
 return func() int {
  return 10 + 20
 }
}

func main() {
 f := work()
 ret := f()
 fmt.Println(ret)
}

输出:

30

骚包玩法2

// 再改造下
func work(a, b int) func() int {
 return func() int {
  return a + b
 }
}

func main() {
 f := work(500, 20)
 ret := f()
 fmt.Println(ret)
}

输出:

520

骚包玩法3

// 再次改造
func work() func(int, int) int {
 return func(a, b int) int {
  return a + b
 }
}

func main() {
 f := work()
 ret := f(600, 50)
 fmt.Println(ret)
}

输出:

650

对3种骚包玩法的简单解析:

再这里就解析一下第3种玩法,能搞懂这个玩法,前面2个玩法,你就自然懂了。work函数没有入参,但是有出参(也可以说是返回值),出参是匿名函数func(int, int) int,这个定义在返回值里的匿名函数有2个int类型的形参(入参)和1个int类型的返回值。再看看函数体内部,没干很复杂活儿,而是直接return了匿名函数,函数体里的这个匿名函数是和定义在返回值里的类型保持一致的,也是接收了2个int的形参a和b,返回值也是int,啥也没干,就做了个相加。好郁闷!不知道你看懂了没?再看看是如何使用work函数的,关键点就在这里,调用work()赋给了变量f,这时候,f它就是一个函数了,再调用f(600, 50),想必你已经知道了为啥要传入2个int值,这下搞定!不知道把你绕晕没,这玩法确实很骚。

「3. 匿名函数和延迟调用」

延迟调用的规则是:按照「先进后出」的顺序,也就是说函数返回前是会被执行的,而且是按照先进后出的顺序。如何起到延迟的效果,是需要注册的,可通过defer关键字进行注册。那么什么场景下需要用到延迟调用呢?比如常见的场景:当一个函数被即将执行完后,也就是完成任务的最后一刻,需要回收和释放某些资源。

延迟调用的机制可以配合匿名函数来使用,这样就可以让匿名函数被直接调用,只能说是真的骚。

先看个小栗子:

package main

import "fmt"

func work() bool {
 fmt.Println("函数开始工作...")
 defer func() {
  fmt.Println("回收相关资源工作开始!")
 }()
 defer func() {
  fmt.Println("清理工作开始!")
 }()
 fmt.Println("函数正在工作...")
 fmt.Println("函数工作完毕...")
 return true
}
func main() {
 status := work()
 fmt.Println(status)
}

输出:

函数开始工作...
函数正在工作...
函数工作完毕...
清理工作开始!
回收相关资源工作开始!
true

在上面的栗子中,定义了个work函数,先看看输出的结果,感受下。在work函数中,注册了两个延迟调用,work函数从开始->正在->完毕,结束后才执行defer注册的匿名函数,这里要着重注意延迟调用规则:「先进后出」,也就是先注册后执行。“回收相关资源工作”是先注册的,他的执行顺序排在了“清理工作”的后面。感受到了吗?

最后说明一下:defer关键字让匿名函数实现了可直接调用,那么使用defer注册延迟调用时要注意,defer关键字的后面一定是要函数或方法的调用,不能直接写语句哦。

到此这篇关于golang函数这些神操作你知道哪些的文章就介绍到这了,更多相关Golang函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Golang函数这些神操作你知道哪些

本文链接: https://lsjlt.com/news/196447.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Golang函数这些神操作你知道哪些
    「1. 用type关键字可以定义函数类型,函数类型变量可以作为函数的参数或返回值。」 package main import "fmt" func add(a, b int) i...
    99+
    2023-02-16
    Golang函数操作 Golang函数 Go 函数
  • 你知道Java的这些骚操作吗?
    目录一、try with catch二、instance of三、不定项参数 ...四、跳出多层循环的label五、方法引用总结一、try with catch 还记得这样的代码吗?...
    99+
    2024-04-02
  • Java中的这些骚操作你不能不知道!!!
    目录1、try with catch2、instance of3、不定项参数 ...4、跳出多层循环的label5、方法引用总结:1、try with catch 还记得这样的代码吗...
    99+
    2024-04-02
  • Java Spring @Autowired的这些骚操作,你都知道吗
    目录前言1. @Autowired的默认装配2. 相同类型的对象不只一个时3. @Qualifier和@Primary4. @Autowired的使用范围4.1 成员变量4.2 构造...
    99+
    2024-04-02
  • JavaScript中你不知道的函数有哪些
    本篇文章给大家分享的是有关JavaScript中你不知道的函数有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。函数声明在JavaScrip...
    99+
    2024-04-02
  • 你知道PHP中的UNIX文件函数有哪些常用的操作吗?
    PHP是一门非常流行的开源编程语言,它被广泛应用于Web开发。在PHP中,UNIX文件函数是非常重要的一部分,用于对文件进行各种操作。这里我们将介绍一些常用的UNIX文件函数及其用法。 1. fopen() 函数 fopen() 函数用于打...
    99+
    2023-10-18
    unix 文件 函数
  • Python的这些库,你知道多少?
    目录一、导读二、前戏三、Python标准库四、科学计算与统计五、数据处理与分析六、可视化七、机器学习、深度学习和强化学习八、自然语言处理一、导读 通常,开发大量原始代码是一个费时费力...
    99+
    2024-04-02
  • 软件测试这些你知道吗?
    我们常常听说的一些测试专业术语,比如白盒、黑盒、单元测试,笔者在前几年对测试也仅仅停留在这个两个词汇上,更多的就不得而知了。后来在一家做跨境电商的公司学到了一些新术语,也见到了测试岗位的一些日常,比如冒烟测试、测试用例(TC)、回归测试、接...
    99+
    2023-06-05
  • 你知道PHP中有哪些UNIX文件函数可以帮你完成文件操作吗?
    PHP是一种非常流行的服务器端脚本语言,被广泛应用于Web开发领域。在PHP中,文件操作是一个非常常见的需求,而UNIX文件函数则是PHP中常用的文件操作函数之一。本文将介绍PHP中常见的UNIX文件函数,帮助你更好地完成文件操作。 一、打...
    99+
    2023-10-18
    unix 文件 函数
  • Go语言编写Apache接口?这些函数你一定要知道!
    Go语言是一门非常流行的编程语言,它的高效、简洁和易于学习的特点深受程序员们的喜爱。而Apache是一个非常流行的Web服务器,使用Apache可以提供丰富的功能和服务。在本篇文章中,我们将探讨如何使用Go语言编写Apache接口,同时介绍...
    99+
    2023-10-05
    函数 apache 接口
  • 微信的这些不为人知的小技巧,你都知道哪些呢?
      随着科技的发展,手机在生活越来越重要,微信渐渐成为我们生活中沟通的重要媒介。现在很多的中老年人也开始使用微信了,但是微信上有很多功能,他们都不会使用,如果我们不在他们的身边,他们又想使用微信的话,那...
    99+
    2024-04-02
  • ASP 函数教程 API:你需要知道哪些基础知识?
    ASP(Active Server Pages)是一种用于创建动态 Web 页面的技术。在 ASP 中,函数是一种非常重要的元素。函数可以将代码封装起来,使其更加模块化和可重用。本文将介绍 ASP 函数的基础知识和常见用法。 函数的定义...
    99+
    2023-10-22
    函数 教程 api
  • jquery基础知识你知道哪些?
      jQuery.parent(expr) //找父元素  jQuery.parents(expr) //找到所有祖先元素,不限于父元素  jQuery.children(expr) //查找所有子元素,只会找到直接的孩子节点,不会返回所有...
    99+
    2023-06-03
  • 你要知道IDEA的这些必备插件
    目录一、Idea中的插件的安装方式二、Free-idea-mybatis三、Grep Console四、Maven Helper五、总结一、Idea中的插件的安装方式 Idea中插件...
    99+
    2024-04-02
  • ASP IDE中的数据类型:你是否知道这些?
    在ASP开发中,数据类型是一个重要的概念。正确使用数据类型能够让代码更加健壮、高效。本文将会介绍在ASP IDE中常用的数据类型,并且会给出一些示例代码。 字符串(String) 字符串是ASP IDE中最常用的数据类型之一。字符串是...
    99+
    2023-10-08
    ide http 数据类型
  • ASP 数据类型详解:这些类型你都知道吗?
    在 ASP 中,数据类型是我们编写程序时必须了解的基本概念之一。在本文中,我们将详细介绍 ASP 中的数据类型及其使用方法,并演示一些相关的代码示例。 一、ASP 中的数据类型 字符串(String):用于存储文本字符数据,通常用于存...
    99+
    2023-07-10
    数据类型 http npm
  • C语言中有哪些字符处理函数你知道吗
    目录1、字符串常用操作:连接、拷贝、比较与获取长度2、mem_类的函数(查找、比较、拷贝与赋值)3、寻找字符串子串4、字符串转数字5、数字转字符串 6、分隔符分割字符串7、...
    99+
    2024-04-02
  • 这些MongoDB的隐藏操作你真的都掌握了吗?反正我是刚知道
    背景 最近公司系统还原用户时偶尔会出现部分用户信息未还原成功的问题,作为开发人员,最头疼的不是代码存在bug,而是测试发现了bug,但一旦我去重现,它就不见了。Are you kidding me 经过漫长的沟通与尝试,终于发现了...
    99+
    2019-02-08
    这些MongoDB的隐藏操作你真的都掌握了吗?反正我是刚知道
  • Python中你应该知道的一些内置函数
    前言 python内置了一些非常巧妙而且强大的内置函数,对初学者来说,一般不怎么用到,我也是用了一段时间python之后才发现,哇还有这么好的函数,这个函数都是经典的而且经过严格测试的,可以一下子省了你原来...
    99+
    2022-06-04
    函数 你应该知道 Python
  • ASP数据类型:有哪些你不知道的?
    ASP是一种常用的Web开发技术,它使用VBScript或JavaScript作为脚本语言。在ASP中,数据类型是非常重要的概念。本文将介绍ASP中的数据类型,包括一些你可能不知道的数据类型。 字符串类型 字符串类型是ASP中最常见的...
    99+
    2023-10-05
    学习笔记 ide 数据类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作