所以我有一个由三个文件组成的小程序,都属于同一个包(main),但是当我"go build main.go"时,构建不成功。 当它只是一个文件(main.go)时一切正常。 现在我花了一些力气来分离代码,看起来编译器无法找到从main.go中取出的东西并放入这两个其他文件(与main.go位于同一目录)。 这导致"未定义'类型'"错误。

我读了一些关于设置GOPATH变量的内容,所以我试过了

1
2
set GOPATH=%cd%
go build main.go

但那也行不通。

任何帮助表示赞赏。

假设您正在编写一个名为myprog的程序:

将所有文件放在这样的目录中

1
myproject/go/src/myprog/xxx.go

然后将myproject/go添加到GOPATH

并运行

1
go install myprog

这样,如果需要,您将能够在myproject / go / src中添加其他包和程序。

参考:http://golang.org/doc/code.html

(这个文档总是被新手错过,并且一开始常常不明白。它应该得到Go团队IMO的最大关注)

  • 确实,我忽略了一个非常有用的章节。谢谢!
  • 为什么不摆脱/ go /并只是做myproject / src?
  • 另外,我假设"go install myprog"以某种方式将项目源写入$ GOPATH位置?那正确吗?如果是这样的话,将这个解释作为答案的一部分也会很高兴
  • @AlexanderMills只有小型项目只使用一种技术。
  • @DenysSguret不确定我是否同意这一点,但无论如何这是为了简单的项目,你可以放弃去的部分 - 人们可能会认为这件事是必要的而不是。你告诉我,哪个更简单,更好还是不走? :)

将代码从main.go分隔为例如more.go时,您只需将该文件传递给go build / go run / go install

所以,如果你以前跑过

1
go build main.go

你现在简单

1
go build main.go more.go

作为进一步信息:

1
go build --help

状态:

1
2
If the arguments are a list of .go files, build treats them as a list
of source files specifying a single package.

请注意,go buildgo installgo run的不同之处在于前两个状态要将包名称作为参数,而后者需要go文件。但是,前两个也会像go install一样接受go文件。

如果您想知道:build只是build包/文件,install将在GOPATH中生成对象和二进制文件,run将编译并运行您的程序。

  • 如果您不想继续添加越来越多的文件,请使用正则表达式:go run * .go
  • 好的,谢谢,Go总是只写出一个可执行文件吗?它不会将可执行文件分开(就像在Java中一样)?
  • go build * .go,那有用吗?不适合我
  • @AlexanderMills因为windows,我认为,使用nix。或至少mingw。
  • 是的我使用MacOS,但也许它的Bash版本3搞砸了,我应该升级到Bash 4。

你也可以跑

1
go build

在项目文件夹myproject / go / src / myprog中

然后你可以输入

1
./myprog

运行你的应用程序

  • 输出是go对象,而不是可执行文件。
  • @ user2284570只需为该文件添加chmod +x权限即可运行它

这取决于您的项目结构。但最直截了当的是:

1
go build ./... -o ./myproject

然后运行./myproject

假设您的项目结构如下所示

1
2
- hello
|- main.go

然后你只需转到项目目录并运行

1
go build -o ./myproject

然后在shell上运行./myproject

要么

1
2
# most easiest; builds and run simultaneously
go run main.go

假设您的主文件嵌套在像cmd这样的子目录中

1
2
3
- hello
|- cmd
 |- main.go

然后你会跑

1
go run cmd/main.go
  • 谢谢-o参数帮助了我

您可以使用

1
2
go build *.go
go run *.go

你也可以使用它们

1
2
go build .
go run .

对!这是非常直接的,这就是包策略发挥作用的地方。我的知识有三种方式。
文件夹结构:

GOPATH / src目录/
github.com/
ABC /
我的项目/
适配器/
main.go
则pkg1
则pkg2
警告:适配器只能包含package main和sun目录

  • 导航到"适配器"文件夹。跑:
  • 1
        go build main.go
  • 导航到"适配器"文件夹。跑:
  • 1
        go build main.go
  • 导航到GOPATH / src
    识别包main的相对路径,这里是"myproject / adapter"。跑:
  • 1
        go build myproject/adapter

    exe文件将在您当前所在的目录中创建。