Go import 报错分析及解决方法

Go Import
整理关于 import 报错的分析及解决方法,希望通过此文可解决97%的import问题,3%可能与IDE有关。

1 import 过程理解:

首先明确 GOROOT 和 GOPATH 绝对路径,通过命令行go env即可查看。
包依赖引用的寻找过程:举例*.go文件中 import "custompkg"会查找如下路径:

  1. /src/custompkg 表示from $GOROOT;
  2. /src/custompkg 表示from $GOPATH;
  3. /src//vendor/custompkg 表示 vendor tree,如果没有用GOVENDER,参考GOMOD;
  4. /src//src/custompkg 表示from $GOPATH;

可见对于自定义的GOPATH中,我们需要创建一个src文件夹(其实应该同时创建3个文件夹bin, pkg, src),然后在src中创建不同project的文件夹,每个project中再创建3个文件夹(bin,pkg,src)。

对于自定义的包文件夹通常创建在//src文件夹中,例如:
Go import 报错分析及解决方法_第1张图片
图1中,util为自定义包文件夹,其中包含多个*.go文件,每个*.go文件包含不同功能函数,当main.go中调用自定义包中不同*.go文件中的这些函数时,只要在main.go中import包路径即可:

import (
	"fmt"
	util "project1/src/util"
)

注释:

  1. "project1/src/util"的位置在\src\文件夹中。

  2. 最开头的util是别名alias,可自定义,调用时写.函数名(),对于自定义的包强烈推荐加别名,且建议和包名相同。
    如果不加别名,有如下要求:
    2.1 自定义的包文件夹命名中不能包含特殊字符例如_, -, +等;
    2.2 包文件夹中所有*.go文件首行package名就是调用方法的类名。
    Go import 报错分析及解决方法_第2张图片

  3. 在同一包文件夹下的不同*.go文件中第一行的 package <包名> 必须相同,建议和包文件夹名相同。

  4. import包文件夹名,就会import此包文件夹下的所有*.go文件,即包文件夹中的所有函数都可用。

  5. import 只能包文件夹,不能以/结尾,也不能是具体的*.go文件。

总结自定义包建议:

1 自定义包文件夹下的不同*.go文件中首行的package名必须相同,建议和包名相同;
2 import含路径的包名强烈建议加别名,调用方法时用别名调用;
3 自定义包文件夹命名不建议包含特殊字符。

import Error 案例:

Symptom: could not import errors (cannot find package "errors" in any of c:\go\src\errors (from $GOROOT)...)
在VS Code中,import 标准库出现如上报错,或已经确认在$GOROOT\src$GOPATH\src\Users\\go\src中存在指定的文件夹,但是仍然报无法找到包的错误。
Go import 报错分析及解决方法_第3张图片
Cause: 查看发现自定义包文件夹下每个*.go文件首行的package <包名>有不一样的。

Solution: 同一包文件夹下不同*.go文件中package包名要求相同。
例如VS Code中,重新打开此项目文件夹即可,或者修改一下package名为任何未使用过的名,再改回来,报错即消失。
类似的报错,会因为修改package的先后顺序而出现Symptom中的错误,此时建议确保package后的命名和import文件夹相同即可,但不强制要求。
Go import 报错分析及解决方法_第4张图片
以上内容来自个人总结自测,如有误导欢迎各位大神留言更正。

你可能感兴趣的:(go,go语言,golang)