首页 > 后端开发 > Golang > 正文

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

青灯夜游
发布: 2022-10-26 19:17:36
转载
3877人浏览过

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

go init函数的详细说明

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

init函数通常用于:

  • 变量初始化
  • 检查/修复状态
  • 注册器
  • 运行计算

包初始化

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

立即学习go语言免费学习笔记(深入)”;

  • 初始化导入的包(递归导入)
  • 计算并为块中声明的变量分配初始值
  • 在包中执行初始化函数

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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:learnku网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号