怎样将Go的main包拆分为多个文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样将Go的main包拆分为多个文件相关的知识,希望对你有一定的参考价值。
参考技术A file0:main.gofunc main()
func1()
func2()
file1:main1.go
func func1()
fmt.Println("1111")
file2:main2.go
func func2()
fmt.Println("222")
如何“运行”主包中包含多个文件的项目?
【中文标题】如何“运行”主包中包含多个文件的项目?【英文标题】: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 pkg
或go 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
产生情感依恋以上是关于怎样将Go的main包拆分为多个文件的主要内容,如果未能解决你的问题,请参考以下文章
如何将 terraform 文件(main.tf)拆分为多个文件(无模块)?