我的源文件树是这样的:
/src
/pkg
/foo
foo.go
foo_test.go
Run Code Online (Sandbox Code Playgroud)
在foo.go里面:
package foo
func bar(n int) {
...
}
Run Code Online (Sandbox Code Playgroud)
在foo_test.go里面:
package foo
func testBar(t *testing.T) {
bar(10)
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
main.go当在之外使用Go模块(go版本> = 1.11)时,找不到在本地包中分解出某些代码的方法$GOPATH。
我没有导入任何需要包含的外部依赖项go.mod,我只是想在本地组织此Go模块的源代码。
文件main.go:
package main
// this import does not work
import "./stuff"
func main() {
stuff.PrintBaz()
}
Run Code Online (Sandbox Code Playgroud)
该文件./stuff/bar.go(假装为本地软件包):
package stuff
import "log"
type Bar struct {
Baz int
}
func PrintBaz() {
baz := Bar{42}
log.Printf("Bar struct: %v", baz)
}
Run Code Online (Sandbox Code Playgroud)
文件go.mod(命令go mod init foo):
module foo
go 1.12
Run Code Online (Sandbox Code Playgroud)
执行时go run main.go:
import "./stuff",那么我明白了build command-line-arguments: cannot find module for path …我有一个非常简单的Go项目,我正在尝试重组,以便它遵循正常的Go项目结构(所以我可以运行go build).
我目前有两个源文件,都有package main.所有文件,包括我的程序在运行时需要的一些文本配置文件.
所以现在,它看起来像:
<project_name>
- main.go
- source2.go
- config_file.txt
Run Code Online (Sandbox Code Playgroud)
go build当我在这个目录中时,我可以运行,它会创建一个二进制文件(命名<project_name>.这样可以正常工作,但我想将其设置为更好地遵循Go标准包结构(特别是以便Intellij IDEA将其识别为一个有效的项目).
现在,我project_name>在Git中拥有整个< 目录,我想保持这种方式.
我尝试将源文件放在一个名为的文件夹中src,但后来go build说没有任何源文件可以编译.
我应该如何构建这个?
编辑:
弄清楚把东西放进去的问题src/:我需要运行go build <project_name>.
我仍然想知道是否有办法在没有全局GOPATH的情况下建立项目.我将所有项目都放在一个文件夹下,每个项目都有一个子文件夹(并非所有项目都是Go项目).我想保留那个系统.
我想要的是:
projects/
- project 1/
- src/
- bin/
- pkg/
- project 2/
- src/
- bin/
- pkg/
Run Code Online (Sandbox Code Playgroud)
然后我希望能够运行go build <project_name>(当我在该项目的目录中时)并让它编译该项目.那可能吗?
好的,Go的主要卖点是它易于编译和精彩的工具链,但作为一个新手,我真的迷失在那里,无法理解关于这一点的文档.
我在两个文件中有一个堆栈玩具示例(一个用于类型定义和方法stack.go,一个用于主程序,一个用于调用main.go),两个都在我的GOPATH/src/stacker目录中.
stacker吗?main.go,我应该如何使用该import指令导入stack.go?我尝试了很多组合,直到现在都没有工作.