美文网首页
golang中的初始化顺序

golang中的初始化顺序

作者: 个00个 | 来源:发表于2018-12-24 19:28 被阅读0次
    1. 一个程序只能有一个main的package. 且pack main 会包含一个main的函数.
    1. pack main会包含多个其他的pack. 这里我们假设还有pack1, pack3.
    1. pack可能还会包含其他的pack. 这里我们假设 pack1. 还包含了 pack2 .
    1. 所有的 pack 都可以包含0个至多个init函数. 没错. 可以有多个init函数... ...
      现在讨论init的调用情况. 结论看起来是
    1. 包之间没有关系的情况下 . 按照import的先后顺序执行. 与包函数的调用顺序无关. ~~~ 静态编译
    1. 看起来是深度递归操作. 永远最先执行最后被包含的pack的init函数.
    1. 同一个pack的多个文件中的init函数是按照文件名的排序来执行的.
    1. 同一个pack的同一个文件也可以有多个init函数.... (神经病). 文本顺序执行.

在一个go文件中, 初始化顺序规则: (1)引入的包 (2) 当前包中的变量常量 (3) 当前包的init (4)main函数

文件结构如下.

.
|-- main.go
|-- pack1
|   |-- pack0.go
|   |-- pack1.go
|   `-- pack11.go
|-- pack2
|   `-- pack2.go
`-- pack3
    `-- pack3.go

代码见
https://github.com/sssandy/golang_test/tree/master/init_test

输出为

test pack3 init
test pack2 init
test pack00 init
test pack1 init before
test pack1 init after
test pack11 init
main init
main

ps: 包级别的变量也是这么个初始化顺序. ps 包级别变量初始化在函数初始化之前.

有些时候我们只想执行包的init和包的变量的初始化, 而不使用包的东西
可以使用 import _ xxx

package main

import (
    _ "mylib/fmt"
)

这一篇文章可以一看 https://blog.csdn.net/htyu_0203_39/article/details/50948193

关于golang的包导入 https://www.flysnow.org/2017/03/04/go-in-action-go-package.html

相关文章

  • golang中的初始化顺序

    一个程序只能有一个main的package. 且pack main 会包含一个main的函数. pack ma...

  • golang 初始化顺序

    1.import机制 ●main -> import pkg1 -> const -> var ... -> in...

  • golang模块初始化

    golang的进程初始化顺序是: 1)先初始化依赖的模块,再初始化本模块 2)模块内初始化按源文件字母序初始化 3...

  • go6~byte切片trim掉C填充的0

    2017.06.02 golang用bytes.TrimSpace无法去掉C初始化数组带来的\0 Golang中字...

  • 调整驱动加载顺序

    Linux内核驱动程序初始化顺序的调整(1) 如何调整Linux内核启动中的驱动初始化顺序

  • Golang中map的顺序输出

    Golang中map的遍历输出的时候是无序的,不同的遍历会有不同的输出结果,如果想要顺序输出的话,需要额外保存顺序...

  • Learn Golang List

    Learn Golang List 简介 list标准包contain中的双向链表 常见操作 初始化 插入 删除 ...

  • golang学习笔记

    golang对一个空channel(未初始化)的读取会永远阻塞,即使在其他goroutine中初始化了也没用 死循...

  • Go-Array

    golang初始化数组 golang中数组为值类型 方式1:指定数组长度 方式2:自行推断数组长度 方式3:指定索...

  • 初始化

    成员方法的初始化 在类的内部,变量的定义顺序决定了初始化的顺序。创建一个对象时,会先初始化对象中的成员变量,然后才...

网友评论

      本文标题:golang中的初始化顺序

      本文链接:https://www.haomeiwen.com/subject/zjuzkqtx.html