关于golang包引用的坑2(终极解决!)
warning:
这篇文章距离上次修改已过501天,其中的内容可能已经有所变动。
关于包引用的坑2(终极解决!)
上回说到用replace可以解决跨包调用的问题,运行是没问题了,但是在vscode里总是提示没法import xxx。因为vscode默认去gopath和goroot里找包的,显然无法找到。经历了各种搜索、更新vscode、go work init xx,都没有解决我的问题。我只需要调用本地同一个项目里,不同包中的方法。网上各种说法都有,有的说得非常复杂,但实没要么就是连go build都编译不过,要么是像上文那样,能go run,但vscode会报错,并且方法调用连智能提示都没有:cry:!
其实解决起来非常简单,在main.go同级目录,执行go mod init 包名。比如go mod init demo,它会自动在main.go同级目录生成go.mod。其它文件夹里的包只管根据实际命名,比如common文件夹里的userHelp.go,用了package common。那么在main.go里可以通过import "demo/common"
来调用,在service模块里同理也是import "demo/common"
就可以调用common模块中的方法。==子模块里根本不需要再go mod init xxx== ,而且还会有智能提示!
vscode有时候会出现无智能提示的情况,重启vscode就好了,这个不知咋解决!
下面两种结构其实都可以的!
评论已关闭