2 回答
TA貢獻1816條經驗 獲得超6個贊
重要的是我的源代碼保留在這個 src 目錄中。同樣重要的是,我能夠從項目的根目錄運行和構建我的代碼(例如,.env 文件位于存儲庫的根目錄)。
這兩個要求是矛盾的。你必須放手一個。
尤其是第二個是沒有根據的:不要使用 go run,使用 go build。將查找 .env 文件的路徑作為程序的命令行選項(Go 不是 PHP 或 JavaScript,根本沒有用于執行二進制文件的項目或源根目錄)。或者在某處構建可執行文件,但在項目根目錄中執行它。
請注意,有一個src文件夾——說得委婉一點——并不常見。
我嘗試將 go.mod 移動到項目的根目錄并運行并運行 go run ./src 但這會導致其自身的問題:
好吧,從根本不使用開始go run,使用go build. 然后嘗試構建實際的主包。所有的 go 工具在包上效果最好,而不是在文件系統文件夾上。如果您的模塊已命名playing.hardball/for-unspecific-reasons并且包 main 在srctry中go build playing.hardball/for-unspecific-reasons/src。
即使這不能達到您想要的方式,也可以得到外賣:
不要使用
go run. 原因是多方面的,對于基本上所有其他用例,運行單個文件腳本和加載的 footgun 很有用。該
go工具適用于導入 路徑。在簡單的情況下,可以從文件系統中推斷出導入路徑。編譯后的可執行文件沒有“項目目錄”、“源代碼”、“類路徑”或其他任何 概念,它是一個獨立的可執行文件,可在任何地方運行,并且完全與源代碼分離。
使所有文件系統查找路徑成為配置選項(命令行標志或環境變量);提供實用的默認值(例如
./);在運行可執行文件時使用它來宣布在哪里可以找到靜態文件,如 .env 文件、模板、圖標、css 文件等。
TA貢獻1802條經驗 獲得超4個贊
從Go 1.18開始,現在可以使用Go 工作區來實現這一點。
使用以下目錄結構
parent-dir/
└─ go.work
hello-world/
├─ go.mod
└─ main.go
您可以從using運行hello-world模塊。parent-dirgo run hello-world
go.work
go 1.18
use ./hello-world
去.mod
module hello-world
go 1.18
注意:這是可能的,不推薦@Volker指出
- 2 回答
- 0 關注
- 109 瀏覽
添加回答
舉報
