![](/img/trans.png)
[英]how can i use a function inside main package from a file in another package in GO?
[英]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
go run .
上面的代码确实有效。 问题是我需要跑
go run *.go
代替
go run main.go
2018 年 8 月更新,在Go 1.11 中, “运行”部分指出:
go run
命令现在允许使用单个导入路径、目录名称或匹配单个包的模式。
这允许go run pkg
或go run dir
,最重要的是go run .
原始答案 2015 年 1 月
正如“如何编译由多个文件组成的 Go 程序? ”中所述,go run
需要一个文件列表,因为它“编译并运行包含命名的 Go 源文件的main
包”。
因此,您当然可以使用go run
将main
包拆分为多个文件。
这与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
多种选择
go run.
go run *.go
make run
using Makefile
其中,添加上述任何命令作为构建目标。用于检测
go test./...
Makefile
和 go make test
go test./...
作为构建目标进行测试对于 Windows,安装 Cygwin 并使用它代替命令提示符。 “go run *.go”将起作用。
如果您尝试按照最新版本 (1.11) 在 go 中使用 gorilla mux 在本地主机上运行多个文件。 尝试使用以下 2 个命令中的任何一个。
去安装 && FolderName -port 8081 。
去构建 && ./FolderName -port 8081。
在终端中执行命令之前,请确保您位于源文件夹中,即 go/src/FolderName。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.