繁体   English   中英

如何在主 package 中“运行”一个包含多个文件的项目?

[英]How can I "go run" a project with multiple files in the main package?

我在main package 中有一个名为main.go的文件。 因为代码不可重用,所以我想将部分代码放在不同的文件中,但在同一个 package 中。

如何在不创建单独的 package 的情况下将main.go的内容拆分为多个文件?

我想要这样的目录结构:

ls foo

# output:
main.go
bar.go
  • 文件: bar.go
package main

import "fmt"

func Bar() {
  fmt.Println("Bar")
}
  • 文件: main.go
package main

func main() {
  Bar()
}

当我运行go run main.go时,它给了我:

# command-line-arguments
./main.go:4:2: undefined: Bar

2019 年 7 月 26 日更新(适用于 >=1.11)

go run .

原答案

上面的代码确实有效。 问题是我需要跑

go run *.go

代替

go run main.go

2018 年 8 月更新,在Go 1.11 中“运行”部分指出:

go run命令现在允许使用单个导入路径、目录名称或匹配单个包的模式。
这允许go run pkggo run dir ,最重要的是go run .


原始答案 2015 年 1 月

正如“如何编译由多个文件组成的 Go 程序? ”中所述,go run需要一个文件列表,因为它“编译并运行包含命名的 Go 源文件的main包”。
因此,您当然可以使用go runmain包拆分为多个文件。

这与go build/go install不同,后者需要包名(而不是 go 文件名)。
一个简单的go build会生成一个以父文件夹命名的可执行文件。

请注意,如 该线程所示go run *.go在 Windows CMD 会话中 不起作用,因为 外壳不进行通配符扩展

在我看来,这个问题的最佳答案隐藏在对最高答案的评论中。

只需运行这个:

go run .

这将运行主包中的所有文件,但不会给出类似的错误消息

go run: cannot run *_test.go files (main_test.go)

感谢@BarthesSimpson

如前所述,您可以说go run *.go但对于 Windows,您可以只列出脚本文件(因为 * go run main.go other.go third.go不起作用)- go run main.go other.go third.go

第一种方法是运行

go run *.go

另一种方法是生成一个exe文件

go build

然后运行那个.exe文件

./filename.exe

多种选择

  1. go run.
  2. go run *.go
  3. make run using Makefile其中,添加上述任何命令作为构建目标。

用于检测

  1. go test./...
  2. 使用Makefile和 go make test go test./...作为构建目标进行测试

对于 Windows,安装 Cygwin 并使用它代替命令提示符。 “go run *.go”将起作用。

如果您尝试按照最新版本 (1.11) 在 go 中使用 gorilla mux 在本地主机上运行多个文件。 尝试使用以下 2 个命令中的任何一个。

  1. 去安装 && FolderName -port 8081 。

  2. 去构建 && ./FolderName -port 8081。

在终端中执行命令之前,请确保您位于源文件夹中,即 go/src/FolderName。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM