每个golang源文件中都可以定义一个init函数。golang系统中,所有的源文件都有自己所属的目录,每一个目录都有对应的包名。在包的引用中,一旦某一个包被使用,则这个包下边的init函数将会被执行,且只执行一次。只执行一次的含义是什么呢?
如果一个包被多个地方引用,那么只有在这个包第一次被引用时,才会执行这个包里边的init函数,其他地方对包的再次引用,这个包里边的init函数不会被执行,从这个意义上来讲,它类似于 sync.Once 。
init 方法无法被显示的调用,会产生编译错误。
在同一个包下的每个文件中都可以定义 init 方法,并且当这个包被调用了,那么这些 init 方法都会被调用到,先后顺序貌似是按照文件名的排序。