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 关注
- 123 浏览
添加回答
举报
