golang var 初始化时机_golang每日一题(init函数和main函数)

本文讨论了Golang中变量初始化的顺序,重点解释了init函数的执行时机,以及main函数的启动过程。通过一个实例展示了初始化过程中可能出现的问题,如因init函数导致的变量重复定义错误。
摘要由CSDN通过智能技术生成

 每日一题

先说今天做任务的时候遇到一个场景,本地go build编译成功的项目,在测试环境时报错:

/data/app/app-job/app-job flag redefined: confpanic: /data/app/app-job/app-job flag redefined: confgoroutine 1 [running]:flag.(*FlagSet).Var(0xc00010a180, 0x1b6e960, 0x2a9be50, 0x19596d4, 0x4, 0x19690a8, 0x13) /usr/local/go/src/flag/flag.go:850 +0x4afflag.StringVar(...) /usr/local/go/src/flag/flag.go:759go-gateway/app/app-svr/app-show/interface/conf.init.0() /go/src/go-main/app/app-svr/app-show/interface/conf/conf.go:279 +0x94

大意是重复定义了一个配置,不过转到报错的地方发现并没有任何地方引用这个方法,不知道什么时候两个包同时引用到这里导致的重复定义。

后来才发现这个方法是golang中特殊的init()函数。

下面先做一道题体会一下,求代码输出:

package mainimport "fmt"var T int64 = a()func init() {
      fmt.Println("calling init1() in main")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值