首页 > 其他分享 >init函数

init函数

时间:2023-10-02 12:25:41浏览次数:39  
标签:调用 函数 util init import main

init函数

代码

//example.go
package test

import (
	"GoExample/util"
	"fmt"
)

var A = util.F("example.A")

// 注意:init函数可以重名
func init() {
	util.F("example.init1")
}

func init() {
	util.F("example.init2")
}

// defer...recover的使用
func DeferRecover() {
	//recover会捕获异常,将捕获后的异常信息放到err中
	//如果没有异常信息,那么为nil
	//匿名函数
	defer func() {
		err := recover()
		if err != nil {
			//输出异常信息
			fmt.Println(err)
		}
	}()
	n := 0
	fmt.Println(3 / n)
}
//util.go
package util

import "fmt"

var i = 0

var F = func(s string) int {
	fmt.Printf("本次被%s调用\n", s)
	i++
	fmt.Printf("匿名工具函数被第%v次调用", i)
	return i
}
//main.go
package main

import (
	"GoExample/test"
	"GoExample/util"
	"fmt"
)

var A = util.F("main.A")

// 注意:init函数可以重名
func init() {
	util.F("main.init1")
}

func init() {
	util.F("main.init2")
}

func main() {
	test.DeferRecover()
	fmt.Println("test.DeferRecover()之后还在运行")
}
    /*
    上述代码的执行结果:
        本次被example.A调用
        匿名工具函数被第1次调用
        本次被example.init1调用
        匿名工具函数被第2次调用
        本次被example.init2调用
        匿名工具函数被第3次调用
        本次被main.A调用
        匿名工具函数被第4次调用
        本次被main.init1调用
        匿名工具函数被第5次调用
        本次被main.init2调用
        匿名工具函数被第6次调用
        runtime error: integer divide by zero
        test.DeferRecover()之后还在运行
    */

init函数的特点

    1.  init函数在程序中是可选的。
    2.  init函数不允许有参数和返回值。
    3.  init函数会自动执行,不允许被调用。
    4.  一个程序中可以有多个init函数。
    5.  一个包中可能会有多个源程序,因此一个包中也可以有多个init函数。

init函数的执行顺序

    这里我们需要分情况讨论:
        1.  如果将多个init函数写在了同一个程序中,那么这些init函数就会按照定义的顺序进行调用。
        2.  如果同一个包中有多个源程序,而这些源程序中又定义了init函数,那么就会按照名字的字典序来依次调用init函数。
        3.  如果存在不同的包,且这些包没有相互的依赖关系(即:一个包import了另一个包),那么就会按照main包的import顺序来依次调用包中的init函数。
        4.  如果存在不同的包,且这些包存在相互的依赖关系,那么最后被依赖的包会被最先初始化。例如:main import A A import B B import C C import D。那么,最先执行D包的init,C包的init,B包的init,A包的init,main包的init,main函数。
        5.  如果在包中定义了全局变量/全局常量,那么全局变量会先于包的init函数初始化。

img

    参考文献:
        https://cloud.tencent.com/developer/article/2138066

标签:调用,函数,util,init,import,main
From: https://www.cnblogs.com/gao79135/p/17739827.html

相关文章

  • 【C++】函数重载 ③ ( 为函数指针赋值重载函数 )
    文章目录一、函数指针回顾1、函数指针概念2、函数指针语法3、代码示例-函数指针示例二、为函数指针赋值重载函数1、为函数指针赋值重载函数2、代码示例-为函数指针赋值重载函数博客总结:重载函数:使用相同的函数名,定义不同的函数参数列表;判定标准:只有函数......
  • 44、Flink之module模块介绍及使用示例和Flink SQL使用hive内置函数及自定义函数详细示
    文章目录Flink系列文章一、模块Modules1、模块介绍2、模块类别ModuleTypes1)、CoreModule2)、HiveModule3)、User-DefinedModule3、模块生命周期和解析顺序ModuleLifecycleandResolutionOrder4、模块Modules的使用1)、SQL方式2)、编码方式-java二、HiveFunctions内置函数和自定......
  • 5.go语言函数提纲
    1本篇前瞻前端时间的繁忙,未曾更新go语言系列。由于函数非常重要,为此将本篇往前提一提,另外补充一些有关go新版本前面遗漏的部分。需要恭喜你的事情是本篇学完,go语言中基础部分已经学完一半,这意味着你可以使用go语言去解决大部分的Leetcode的题,为此后面的1篇,将带领大家去巩固go语......
  • mysql中find_in_set()函数的使用及in()用法详解
    MySQL手册中find_in_set函数的语法解释:FIND_IN_SET(str,strlist)str要查询的字符串strlist字段名参数以”,”分隔如(1,2,6,8,10,22)查询字段(strlist)中包含(str)的结果,返回结果为null或记录假如字符串str在由N个子链组成的字符串列表strlist中,则返回值的范围在1到N之间......
  • mysql中find_in_set()函数的使用及in()用法详解
    MySQL手册中find_in_set函数的语法解释:FIND_IN_SET(str,strlist)str要查询的字符串strlist字段名参数以”,”分隔如(1,2,6,8,10,22)查询字段(strlist)中包含(str)的结果,返回结果为null或记录假如字符串str在由N个子链组成的字符串列表strlist中,则返回值的范围在1到N之间......
  • 前端JSON.stringify,JSON.parse函数
    JSON.stringify将对象转为JSON字符串;JSON.parse将JSON字符串转为对象;对象:{productId:129}JSON字符串:"{\"productId\":129}"***JSON使用场景***1. localStorage/sessionStorage存储对象  localStorage/sessionStorage只可以存储字符串,当我们想存储对象的时候,需要使用JSON.s......
  • 无涯教程-JavaScript - WEBSERVICE函数
    描述WEBSERVICE函数从Internet或Intranet上的Web服务返回数据。语法WEBSERVICE(url)争论Argument描述Required/OptionalurlTheURLofthewebservice.RequiredNotes如果参数无法返回数据,则WEBSERVICE返回#VALUE!错误值。如果参数导致一个无效的字符串或包......
  • 无涯教程-JavaScript - ENCODEURL函数
    描述ENCODEURL函数返回URL编码的字符串。语法ENCODEURL(text)争论Argument描述Required/OptionalTextAstringtobeURLencoded.Required适用性Excel2013,Excel2016Example参考链接https://www.learnfk.com/javascript/advanced-excel-statistical-encode......
  • 无涯教程-JavaScript - UPPER函数
    描述UPPER函数将文本转换为大写。语法UPPER(text)争论Argument描述Required/OptionalText您要转换为大写的文本。文本可以是引用或文本字符串。Required适用性Excel2007,Excel2010,Excel2013,Excel2016Example参考链接https://www.learnfk.com/javascri......
  • 无涯教程-JavaScript - UNICODE函数
    描述UNICODE函数返回与文本的第一个字符相对应的数字(代码点)。语法UNICODE(text)争论Argument描述Required/OptionalTextTextisthecharacterforwhichyouwanttheUnicodevalue.RequiredNotes如果文本包含部分替代或无效的数据类型,则UNICODE返回#VALUE!......