返回顶部
首页 > 资讯 > 精选 >go语言的init()方法如何使用
  • 834
分享到

go语言的init()方法如何使用

2023-07-04 23:07:51 834人浏览 八月长安
摘要

这篇“Go语言的init()方法如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言的init()方法如何使用”文

这篇“Go语言的init()方法如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言的init()方法如何使用”文章吧。

在go语言中,init()方法用于包的初始化;初始化每个包后,会自动执行init()函数,并且执行优先级高于主函数的执行优先级。init()方法通常用于:1、变量初始化;2、检查/修复状态;3、注册器;4、运行计算。init()函数在程序运行时,自动自动被调用执行,不能在代码中主动调用它。不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序。

Go init函数的详细说明

go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性

程序执行时导入包语句会自动触发包内部init()函数的调用。

初始化每个包后,会自动执行init()函数,并且执行优先级高于主函数的执行优先级。

需要注意的是:init()函数没有参数,也没有返回值。

init函数通常用于:

  • 变量初始化

  • 检查/修复状态

  • 注册器

  • 运行计算

init()函数在程序运行时,自动自动被调用执行,不能在代码中主动调用它。

包初始化执行的顺序如下图所示:

go语言的init()方法如何使用

结果是:

10Hello 沙河

init()函数有下面的特点:

  • init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等

  • 每个包可以拥有多个init函数

  • 包的每个源文件也可以拥有多个init函数

  • 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)

  • 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序

  • init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

包初始化

为了使用导入的程序包,必须首先对其进行初始化。初始化始终在单个线程中执行,并且以程序包依赖关系的顺序执行。这由golang的运行时系统控制,如下图所示:

  • 初始化导入的包(递归导入)

  • 计算并为块中声明的变量分配初始值

  • 在包中执行初始化函数

go语言的init()方法如何使用

initial.go

package mainimport "fmt"var _ int64=s()func init(){  fmt.Println("init function --->")}func s() int64{  fmt.Println("function s() --->")  return 1}func main(){  fmt.Println("main --->")}

执行结果

function s() —>init function —>main —>

即使程序包被多次导入,初始化也只需要一次。

特性介绍

init函数不需要传入参数,也不需要返回任何值。与main相比,init没有声明,因此无法引用。

package mainimport "fmt"func init(){  fmt.Println("init")}func main(){  init()}

编译上述函数“undefined:init”时发生错误。

每个源文件可以包含一个以上的init函数,请记住,写在每个源文件中的“行进方式”只能包含一个init函数,这有点不同,因此进行下一个验证。

package mainimport "fmt"func init(){  fmt.Println("init 1")}func init(){  fmt.Println("init2")}func main(){  fmt.Println("main")}

从上面的示例中,您可以看到每个源文件可以包含多个init函数。

初始化函数的一个常见示例是设置初始表达式的值。

var precomputed=[20]float64{}func init(){  var current float64=1  precomputed[0]=current  for i:=1;i<len(precomputed);i++{    precomputed[i]=precomputed[i-1]*1.2  }}

因为不可能在上面的代码(这是一条语句)中将for循环用作预先计算的值,所以可以使用init函数来解决此问题。

Go套件汇入规则的副作用

Go非常严格,不允许引用未使用的软件包。但是有时您引用包只是为了调用init函数进行一些初始化。空标识符(即下划线)的目的是解决此问题。

import _ "image/png"

以上就是关于“go语言的init()方法如何使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: go语言的init()方法如何使用

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

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

猜你喜欢
  • go语言的init()方法如何使用
    这篇“go语言的init()方法如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言的init()方法如何使用”文...
    99+
    2023-07-04
  • go语言的init()方法有什么用
    在go语言中,init()方法用于包的初始化;初始化每个包后,会自动执行init()函数,并且执行优先级高于主函数的执行优先级。init()方法通常用于:1、变量初始化;2、检查/修复状态;3、注册器;4、运行计算。init()函数在程序运...
    99+
    2023-05-14
    init() go语言 Golang
  • Go语言之init函数怎么使用
    今天小编给大家分享一下Go语言之init函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。init函数会在main函...
    99+
    2023-07-02
  • 如何在go语言中使用scan方法
    如何在go语言中使用scan方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。操作环境:windows10系统、GO 1.11.2、thinkpad t480电...
    99+
    2023-06-14
  • Go语言中sync.Mutex的使用方法
    目录背景互斥锁注意背景 多个协程操作中经常出现脏读写的情况,这种情况下需要使用互斥锁,保证在对协程共享区域操作的原子性。 如下示例: 启动了 100个协程,每个协程累加 100 次,...
    99+
    2023-03-06
    Go sync.Mutex Go sync.Mutex使用方法
  • Go语言中go mod vendor使用方法
    目录1.背景2.环境3.使用4.原理5.参考1.背景 我们基于 go mod 机制来管理我们项目的依赖库版本,其中 go.mod 记录了依赖库版本信息。 一般第三方依赖库(包括公司...
    99+
    2024-04-02
  • 如何在Go语言中有效使用create方法
    在Go语言中,使用create方法可以很方便地实现对象的创建和初始化操作。create方法通常用于创建对象实例,进行必要的初始化工作,并返回创建好的对象指针。在本文中,我将为您介绍如何...
    99+
    2024-03-12
    go语言 create方法 有效使用
  • Go语言中init函数与匿名函数使用浅析
    目录init函数基本介绍注意事项和细节案例匿名函数介绍调用方式方式1方式2init函数 基本介绍 每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架...
    99+
    2023-01-16
    Go init函数与匿名函数 Go init函数 Go匿名函数
  • Go语言包如何使用
    本篇内容介绍了“Go语言包如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!包(package)是多个Go源码的集合,是一种高级的代码复...
    99+
    2023-07-04
  • Go语言sync.Cond如何使用
    本篇内容介绍了“Go语言sync.Cond如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基本使用1 定义sync.Cond是Go语言...
    99+
    2023-07-05
  • 如何分析Go语言中的方法
    如何分析Go语言中的方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。概念在golang中的方法是作用在特定类型的变量上,因此自定义类型都是可...
    99+
    2024-04-02
  • Go语言rune方法怎么使用
    这篇“Go语言rune方法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言rune方法怎么使用”文章吧。1.b...
    99+
    2023-07-05
  • Go语言的数组如何使用
    这篇文章主要讲解了“Go语言的数组如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言的数组如何使用”吧!什么是数组什么是数组?数组是有固定长度的相同数据类型元素的集合, 如下图所...
    99+
    2023-07-05
  • go语言中的const如何使用
    这篇文章主要讲解了“go语言中的const如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go语言中的const如何使用”吧!在go语言中,const关键字可定义常量,用于存储不会改变...
    99+
    2023-07-05
  • Go语言中的sync.Mutex如何使用
    这篇文章主要介绍了Go语言中的sync.Mutex如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言中的sync.Mutex如何使用文章都会有所收获,下面我们一起来看看吧。背景多个协程操作中经常出现...
    99+
    2023-07-05
  • go语言中的WaitGroups如何使用
    这篇文章主要讲解了“go语言中的WaitGroups如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go语言中的WaitGroups如何使用”吧!什么是WaitGroups?WaitG...
    99+
    2023-07-05
  • Go语言中init函数和defer延迟调用关键词的方法是什么
    这篇文章主要介绍“Go语言中init函数和defer延迟调用关键词的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言中init函数和defer延迟调用关键词的方法是什么”文章能帮助大...
    99+
    2023-07-05
  • go语言中的split方法怎么使用
    这篇文章主要介绍了go语言中的split方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言中的split方法怎么使用文章都会有所收获,下面我们一起来看看吧。在go语言中,Split()方法用于分...
    99+
    2023-07-05
  • Go语言中的next()方法怎么使用
    本文小编为大家详细介绍“Go语言中的next()方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中的next()方法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在许多编程语言中,序列...
    99+
    2023-07-06
  • Go语言中的基本map使用方法
    Go语言是一种开源的编程语言,具有高效性和简洁性,其中的数据结构之一就是map。在Go语言中,map是一种“键值对”的数据结构,可以用来存储一系列无序的键值对。本文将详细介绍Go语言中...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作