• 技术文章 >后端开发 >Golang

    一文解析Golang中的init ()函数

    青灯夜游青灯夜游2022-10-26 19:17:36转载1955

    Go init函数的详细说明

    初始化每个包后,会自动执行init()函数,并且执行优先级高于主函数的执行优先级。【相关推荐:Go视频教程

    init函数通常用于:

    包初始化

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

    initial.go

    package main
    import "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 main
    import "fmt"
    func init(){
      fmt.Println("init")
    }
    func main(){
      init()
    }

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

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

    package main
    import "fmt"
    func init(){
      fmt.Println("init 1")
    }
    func init(){
      fmt.Println("init2")
    }
    func main(){
      fmt.Println("main")
    }
    /* 实施结果:
    init1
    init2
    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"

    摘要

    以上是本文的全部内容。希望本文的内容对您的学习或工作具有参考价值。

    原文地址:https://developpaper.com/detailed-explanation-of-init-function-in-go-language/

    译文地址:https://learnku.com/go/t/47178

    更多编程相关知识,请访问:编程视频!!

    以上就是一文解析Golang中的init ()函数的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐:Golang
    上一篇:【整理分享】一些GO面试题(附答案解析) 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 有关golang项目中常用的.gitignore文件(笔记)• VSCode中如何进行Golang开发?开发环境配置介绍• 一文了解Golang中的缓存库freecache• 聊聊Golang的协程泄露,看看怎么预防泄露• 聊聊Golang中的几种常用基本数据类型• 一文详解Golang中的位操作
    1/1

    PHP中文网