簡體   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