Golang1.21的package初始化顺序变更
目录
在Go1.21之前,package初始化并没有明确地规定,在1.21中明确了package初始化的顺序。
相关issue:⌗
可能的影响⌗
如果某些项目如果依赖于包的初始化顺序,如上面issue中的例子,如果packagea
的init()
依赖了packageb
中init()
初始化的环境变量,那么package初始化顺序的变更可能会造成影响。
一个受影响的issue例子
包初始化顺序的算法⌗
- 对所有import的包进行排序,放在一个列表中
- 重复以下步骤,直到所有包都被初始化
- 找到第一个所有依赖的import包都已经被初始化的包
- 初始化该包,并从列表中移除
图示如下, 被初始化的包用绿色标记
其他参考⌗
Read other posts