小工具      在线工具  汉语词典  css  js  c++  java

Go的init函数、匿名函数、闭包、函数参数传递

Go,golang,开发语言 额外说明

收录于:152天前

初始化函数

go的每个源文件中都有一个init函数。该函数会在主函数执行之前被调用,并且该方法将通过显式重载被赋予一个新的方法体。

在go源文件中,程序的执行顺序是全局变量、init函数、main函数。

package main

import "fmt"

var a = show()

func show() int {
    
	fmt.Println("show ....")
	return 1
}

func init() {
    
	fmt.Println("init ....")
}

func main() {
    
	fmt.Println("main ....")
}

在这里插入图片描述

init 函数是用于在程序执行之前初始化包的函数。不同包的init函数根据包导入的依赖关系决定初始化函数的执行顺序。 init函数不能被其他函数调用,但要在main函数执行之前调用。自动呼叫。

匿名函数

匿名函数没有名称,需要在定义时调用。

func main() {
    
	a := func(a int, b int) int {
    
		return a + b
	}(1, 2)
	fmt.Println(a)
}

在这里插入图片描述
匿名函数定义时调用会直接返回函数的返回值。另外如果定义时未调用那么可以将该匿名函数赋值给一个变量,该变量就是一个函数类型,可当作函数使用。

func main() {
    

	//未调用的匿名函数
	b := func(a int, b int) int {
    
		return a - b
	}
	c := b(1, 2)
	fmt.Println(c)
	fmt.Printf("%T", b)
}

在这里插入图片描述

//定义全局匿名函数

var Fn = func(a int, b int) int {
    
	return a * b
}

关闭

闭包是一个函数及其关联的引用环境组合成一个整体(实体)。

函数作为参数

在Go语言中,函数也是一种数据类型,因此函数也可以作为参数传递。应该指出的是,函数具有特殊的特性。函数是通过函数名来调用的。因此,函数不能通过函数名声明函数类型,只能通过初始化构造函数变量。

//定义一个add函数
func add(a int, b int) int {
    
	return a + b
}

//定义一个函数参数的方法

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

//main函数赋值函数类型并传参
func main() {
    
	//变量赋值add函数类型
	var func1 = add
	fmt.Println(func1)
	//函数做参数
	c4 := operation(1, 2, func1)
	fmt.Println(c4)

}

在这里插入图片描述

. . .

相关推荐

额外说明

笔记-Mybatis调用存储过程并传递参数并获取返回值

文章目录 前言 service调用mapper mapper文件 mapper.java mapper.xml 注意点 获取返回值 前言 Mybatis 是目前开发中用到最多的框架,普遍用于数据表的crud操作。 本篇文章主要说明mybatis调用存储过

额外说明

Apollo 使用手册地址

手册 ApolloA reliable configuration management systemhttps://www.apolloconfig.com/#/zh/README 代码 apollo: Apollo(阿波罗)是一个可靠的配置管理系统,

额外说明

Spring Cloud --zuul搭建 之 自定义 filter 检查访问是否带token

https://blog.csdn.net/Joe_Wang1/article/details/82871994?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distrib

额外说明

IDEA中SVN的使用(提交,同步)

本人新手,不足之处,请谅解。 有不足之处,欢迎提出。 下面我来大家介绍下在idea中使用svn的步骤: 这样就打开了svn的应用 点击加号 输入您的svn的地址 我来给大家简单说下控制人的功能: 此处可以看到同事们提交的代码内容,时间,提交人等信息。 这

额外说明

湖南大学CS-2022期末考试解析

【特别注意】 答案来源于@wolf 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 这张试卷跟往年的考察点不太一样,有些偏,但值得一做。我们可以逐渐看出它是怎么一年一年越来越奇怪的。这张试卷的难度是最大的,根本不能来得及做完。我在

额外说明

【数据结构】树,二叉树,满二叉树,完全二叉树的定义和二叉树的基本操作

-专栏【数据结构】 -喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 -音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题- 目录 ⭐树 -️‍-定义  -️‍-注意 -树的基本术语 ⭐二叉树 -️‍-定义 -二叉树和树的区别 -️‍-二叉树的性

额外说明

Linux命令200例:chgrp更改文件或目录的组所有权

-作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。 -本文已收录于专栏:Linux命令大全。 -本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入讲解。欢迎提前锁定关注。 文章目录 -一、什么是c

额外说明

Windows系统mfperfhelper.dll文件丢失找不到的解决办法

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个mfperfhelper.d

额外说明

Windows系统缺失winsock.dll文件导致程序打不开解决办法

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个winsock.dll文件(

额外说明

后端都需要学什么

最近读到一篇好文章,作者详细介绍了后端程序员需要学习什么。如果你还是一头雾水,那就去读一读吧。也许能为你指明方向,少走很多弯路! https://www.zhihu.com/question/24952874 学习路线: 计算机专业大学四年课程 计算机学

ads via 小工具