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

Posted

技术标签:

【中文标题】如何“运行”主包中包含多个文件的项目?【英文标题】:How can I "go run" a project with multiple files in the main package? 【发布时间】:2015-03-20 19:33:06 【问题描述】:

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

如何在不创建单独包的情况下将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

【问题讨论】:

【参考方案1】:

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

go run .

也可以在 Windows 上工作。

原始答案(适用于非 Windows 环境)

代码确实有效。问题是我应该运行而不是运行go run main.go

go run *.go

【讨论】:

除非您的文件夹中有*_test.go。然后你需要 (1) shopt -s ext glob 和 (2) go run !(*_test).go 那些使用 appengine 的人呢? 我试过go run ./cmd/myCmd/...,它对我有用。当有_test.go 文件时,也许这是正确的方法? go run ../your_folder 从工作文件夹中为我工作 随便go run .【参考方案2】:

第一种方法是运行

go run *.go

另一种方法是生成exe文件

go build

然后运行那个.exe文件

./filename.exe

【讨论】:

【参考方案3】:

在我看来,这个问题的最佳答案隐藏在顶部答案的 cmets 中。

运行这个:

go run .

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

的错误消息
go run: cannot run *_test.go files (main_test.go)

向@BarthesSimpson 致敬

【讨论】:

【参考方案4】:

2018 年 8 月更新,Go 1.11,section "Run" 状态:

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


2015 年 1 月的原始答案

如“How to compile Go program consisting of multiple files?”中所述,go run 需要一个文件列表,因为它“编译并运行包含命名 Go 源文件的 main 包”。 因此,您当然可以使用 go run 将您的 main 包拆分为多个文件。

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

请注意,作为illustrated by this thread,go run *.go 在 Windows CMD 会话中不起作用,因为shell doesn't do wildcard expansion。

【讨论】:

是否有使用 Windows 命令提示符运行多个带有 run 的 go 文件的解决方法? 谢谢!这对我帮助很大。我一直想知道为什么我不能只用 main.go 运行代码,因为它是同一个包,但我觉得他们为什么不允许这样做是有道理的。 @Luke 只需指定两个文件,用空格分隔。【参考方案5】:

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

    去安装 && FolderName -port 8081 .

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

是的,没错。在 Windows 中,我必须运行 go run .【参考方案7】:

对于 Windows 安装 Cygwin 并使用它代替命令提示符。然后“go run *.go”就可以了。

【讨论】:

我会为此建议 MinGW,但如果你问我,这种方法是正确的。我怀疑任何人都可能真正对cmd.exe产生情感依恋

以上是关于如何“运行”主包中包含多个文件的项目?的主要内容,如果未能解决你的问题,请参考以下文章

当我在 settings.gradle 文件中包含项目时,如何不包含构建任务?

clang在同一目录中包含多个搜索路径

如何在 CMake 项目中包含外部库

如何从 SQL 中包含多个列的报表中的列中选择最近的项目?

在安装项目中包含文件依赖项

文件夹中包含名称过长的项目,如何删除