Go语言在使用中,大家都绕不开搜索路径这个概念。简单来说,Go语言的搜索路径分如下几种。
1 引用系统自带的各种package
不用管搜索路径,会自动去加载。
2 完全自包含项目
如果项目里面只存在package main,那么就会在本路径搜索。
3 引用了其它的包
会按如下的顺序进行搜索,如果搜索了就会停止。
3.1 搜索当前路径的vendor目录
3.2 搜索上一级目录里面的vendor目录
3.3 一直往上搜索到$GOPATH/src里面的vendor目录
3.4 搜索$GOPATH/src的路径
如果存在多个$GOPATH,会从前到后一个一个搜索,找到就停止了。注意不会在当前路径开始搜索。
因为上面的搜索顺序中,搜索到包就会停止,所以如果vendor里面存在包,但是不存在某函数,即使$GOPATH存在同样的包并且包含函数,也会报错找不到定义的函数,因为搜索到包就结束了。