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

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

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

收录于:17天前

初始化函数

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)

}

在这里插入图片描述

. . .

相关推荐

额外说明

如何安装LINUX05_JDK1.8

软件地址 链接:https://pan.baidu.com/s/1ew2CHuVrUvtQwX2UZ61T3g 提取码:1234 ①. 将文件传到/opt下,并解压: tar -zxvf jdk-8u152-linux-x64.tar.gz ②. 将

额外说明

设计模式01_结构原则、创建原则、行为原则、七大原则

文章目录 ①. 什么是 GOF ②. 设计模式总览 ③. 设计的7大原则 ①. 什么是 GOF ①.在1994年,由ErichGamma、RichardHelm、RalphJohnson和JohnVlissides四人合著出版了一本名为DesignPat

额外说明

小米,苹果,百度,三星等公司的智能语音识别功能如何测试?

前言 现在市面上的智能电子产品千千万,为了达到人们使用更加方便的目的,很多智能产品都开发了语音识别功能,用来语音唤醒进行交互;另外,各大公司也开发出来了各种智能语音机器人,比如小米公司的“小爱”,百度公司的“小度”,三星公司的“bixby”,苹果的“si

额外说明

JAVA对称加密-实例

背景: 在实际开发的过程中,为了安全,需要对传输的关键值进行加密或者在接口调用的过程中需要对关键值进行加密,防止数据被修改。 满足需求的基本设计思路: 1. 后台加密,比较安全,代码以及算法是安全的,对浏览器是不可见的。 2.基于JAVA平台。 3. 采

额外说明

Python每日一练——字符串与正则表达式第九关:正则表达式分组的使用

面试题第九关: 第一部分——考点: 正则表达式分组的使用 第二部分——面试题: 1.面试题一:如何搜索字符串中包含区号和分机号的第一个出现的电话号,并提取电话号中的区号,电话号和分机号,要求: 区号固定是三位数字 电话号至少是七位数字 分机号至少是三位数

额外说明

【Unity3D插件】EasyAR插件分享《AR使用及开发案例》

推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 这篇文章介绍如何使用EasyAR.unitypackage配置EasyAR 参考资料 1、EasyAR 初学者入门指南 http:

额外说明

6.scala辅助构造器与为构造函数提供默认值(一)

概述 本文主要说明: 辅助构造器 与 为构造函数提供默认值 的使用 辅助构造器 为构造函数提供默认值 相关链接 阅读之前,可以浏览一下 scala相关文章 辅助构造器 可以通过定义名为this的方法来定义辅助Scala类构造函数。只有几个规则需要了解:

额外说明

Linux文本编辑器vim使用和配置详解

vim介绍 ​ vim是Linux的一款文本编辑器,可以用来编辑代码,而且支持语法高亮,还可以进行一系列配置使vim更多样化。也可以运行于windows,mac os上。 ​ vim有多种模式,但目前我们只介绍绝大多数场景用的到的模式,也就是命令模式,插

额外说明

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《2》

上一篇文章 是对这个模型做个测试,效果很不错,然后这节,我们来关注下论文中的一些知识点  原论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

额外说明

2.9.1 Ext JS中的字符串对象类型(String)

大纲 JavaScript的String 类型 Ext.String 处理字符串的有用静态方法的集合。 String 对象类型 在Ext JS提供了String的API参考, 但是String 其实是JavaScript原生的数据类型。 在JavaScr

ads via 小工具