[英]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.