簡體   English   中英

如何通過命令行運行當前目錄下的所有.go文件(多文件包)

[英]How to run all .go files within current directory through the command line (multi file package)

我是 Go 的新手。 我非常喜歡這種語言,但我很快意識到由於程序大小的增加,我需要開始分割我的文件。

go run main.go (main.go 是我的 main() 函數的文件)

沒有工作,我遇到了一段時間的障礙,因為我不知道如何讓我的程序工作。

一些快速搜索使我找到了答案

go run main.go other.go ..

通過鍵入package main包含的所有文件,我可以運行程序。 但是,每次這樣做都非常麻煩且令人沮喪。

我寫了以下自我回答的問題,以防止像我這樣的其他人再次遇到這個障礙。

正如內特芬奇所指出的:

Go run 是......實際上只用於非常小的程序,通常只需要一個文件。

即使在 unix 上, go run *.go通常也不正確。 在任何帶有單元測試的項目中(並且每個項目都應該有單元測試),這將給出錯誤:

go run: cannot run *_test.go files (something_test.go)

它還將忽略構建限制,因此_windows.go文件將在 Unix 上編譯(或嘗試編譯),這不是您想要的。

一些關於go run像其他go命令一樣工作的討論,並且有一個開放的 CL ( 5164 )。 Go 1.4 目前正在考慮中。 同時,在所有平台上推薦的解決方案是:

go build && ./<executable>

最后我們現在可以使用:

go run .

感謝: https : //github.com/golang/go/issues/22726#issuecomment-345841019

Unix相關系統

go run *.go在大多數情況下就足夠了。

如果這導致錯誤,請繼續執行以下方法。

Windows 系統(以及在go run *.go不起作用的其他情況下)

令牌擴展在 Windows 命令行中不起作用,因此上述內容不起作用並顯示錯誤。 由於當前編譯器的限制, go run *.go在某些情況下也可能無法在操作系統中go run *.go

在這些情況下,使用

go build && foo.exe

其中foo.exe是生成的 .exe 文件的名稱。 如果您可能不知道可執行文件的名稱是什么,請首先

go build並檢查生成的 .exe 文件的名稱。 之后,使用包含文件名的方法。

這 2 種方法將以最小的麻煩構建和運行當前目錄中的所有 .go 文件。

您可以使用以下 bash 構造運行所有.go文件,不包括測試:

go run $(ls -1 *.go | grep -v _test.go)

最好的方法是像這樣運行它:

go run !(*_test).go

它會跳過您所有的測試文件,這正是您避免錯誤所需要的。

另一個建議:

go build && ./<executable>

有點煩。 你必須一直刪除可執行文件以避免被git標記。 當然,你可以把它放在 gitignore 中,但我很懶,這是一個額外的步驟。

如果我理解您的問題,您需要將其他代碼作為庫導入。

小例子

./testing/main.go:

package main

import "fmt"
import L "testing/lib"

func main() {
    fmt.Println("Hello from main()")
    L.Somefunc()
}

./testing/lib/somelib.go:

package lib

import "fmt"

func Somefunc() {
    fmt.Println("Hello from Somefunc()")
    return
}

啟動 - go run main.go

就用這個

go run *.go 

假設你沒有任何測試文件,它會工作

這是我的解決方案:

go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)

我將它與別名一起使用,以便於運行命令行應用程序

alias gorun='go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)'

$ gorun param1 param2

在 Windows 上,我通常只在我所有的項目目錄中添加一點test.bat

go build
.\{project_name}.exe
go clean

工作得很好。 當然,將 {project_name} 替換為可執行文件的名稱。 一旦可執行文件完成,批處理腳本就會繼續進行清理。

對於嘗試將go rungo generate結合使用的人,解決方案可以是:

//go:generate sh -c "go run path/*.go"

如果您在 Windows 上的 Vscode 終端中運行並且不了解工作區,請執行以下操作:

go run $(ls *.go)

對於窗口,以下工作:打開 cmd 並轉到您的文件夾所在的路徑。 然后鍵入以下命令並按 Enter。

go build

在此之后將創建一個可執行文件。 然后在命令提示符下調用可執行文件。 如果您的可執行文件名為 Project.exe,則鍵入以下內容並按 Enter:

Project.exe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM