import导包路径问题
因为我import导包路径上面出了点问题,还没有得到解决,明日再寻找方法解决。
实在是给我整不会了,明天再更新import部分
——————————————————分割线———————————————————
已经找到了解决方法
这是我的代码结构,lib1和lib2包下的两个文件内,分别有两个方法,我需要在main.go文件中,调用lib1.go和lib2.go的方法。那么我就要先导入lib1包和lib2包,如下
package main
import (
"Go_Workspace/5-init/lib1"
"Go_Workspace/5-init/lib2"
)
func main() {
lib1.Lib1Test()
lib2.Lib2Test()
}
lib1.go文件如下
package lib1
import "fmt"
// 当前lib1包提供的api
//方法首字母大写代表此方法是一个对外开放的接口
//小写则代表此方法只能在本包内调用
func Lib1Test() {
fmt.Println("lib1Test()......")
}
func init() {
fmt.Println("lib1.5-init()......")
}
lib2.go文件如下
package lib2
import "fmt"
// 当前lib2包提供的api
func Lib2Test() {
fmt.Println("lib2Test()......")
}
func init() {
fmt.Println("lib2.5-init()......")
}
我昨天的问题就出在了lib1.go与lib2.go内部的导包错误,我应该写package lib1(lib2),而不是package main。
因为我这两个文件里面根本就没有用到main方法,而且如果不package lib1(lib2)的话,就代表,在lib1与lib2包内,并没有lib1.go与lib2.go,这是最关键的,这也就是为什么我
import (
"Go_Workspace/5-init/lib1"
"Go_Workspace/5-init/lib2"
)
会报错了。
init方法的调用流程
我们在写程序的的时候呢,不仅是main有出入口,实际上每个包都会有一个main函数来作为当前包的一个入口。
有关main函数和init一个调用的基本过程,我们一般进程入口呢是main来作为咱们程序主入口,然后呢实际上再往下走的时候呢,我会导入很多包,比如说import fmt等等吧。甚至是我们制定的自己的包。
当我们准备导包的时候呢,实际上这个程序在它的流程里并不会往下执行,而是先去这个包里解析有没有第二个包,然后继续往下递进的。直到它里边儿没有找到任何包为止。
然后它会分析里边儿的一些的有关全局常量,局部变量,最终才会去执行这个包里的init函数;
如果当前的包他没有定义init函数,这函数就不再执行了;
如果定义了的话,你重写的一个自定义的一个函数,它会执行,然后呢,出来反回去,继续分析以此类推。
最后执行main包里的全局变量、常量和init函数和main。
综上所述,init函数的优先级是要高于main函数的。