构建没有主文件的 Go 模块

Jey*_*eyJ 8 go go-modules

我有一个小模块,其中包含一些共享代码。该模块如下所示:

\n
Shared\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 logging\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 logger.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 db-utils\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 db.go\n
Run Code Online (Sandbox Code Playgroud)\n

如果我尝试从目录内部构建共享模块,我会收到一条错误消息,指出该模块下没有可用的 go 文件。

\n
bash-3.2$ go build .\nno Go files in /Users/xxxx/go/src/Shared\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法构建一个内部只有包而没有 main.go 文件的 Go 模块?这里的动机是在无法访问互联网或私人存储库的其他 go 模块中使用这些包来检索包。

\n

Tob*_*san 5

如果您只需要在loggingdb-utils目录中构建文件,那么您可以从根目录执行以下命令Shared

go build <INSERT_MODULE_NAME_FROM_GO_MOD>/logging
go build <INSERT_MODULE_NAME_FROM_GO_MOD>/db-utils
Run Code Online (Sandbox Code Playgroud)

如果其中一个文件依赖于其他目录中的文件,我不确定这些命令是否有效。

另一个可能构建整个项目的命令是:

go build ./...
Run Code Online (Sandbox Code Playgroud)


bcm*_*lls 4

go命令将下载的模块作为源代码而不是编译的目标文件存储在模块缓存中。根据需要重建目标文件并将它们存储在单独的构建缓存中。go build

\n

如果您想分发非公共模块以与其他模块一起使用,您有以下几种选择:

\n
    \n
  1. 您可以将模块发布到私有存储库 \xe2\x80\x94,通常使用存储在文件.netrc\xe2\x80\x94 中的凭据进行访问,并使用GOPRIVATE环境变量告诉go命令不要尝试从公共代理和校验和中获取它服务器。

    \n
  2. \n
  3. 您可以提供GOPROXY包含源代码的专用服务器或目录,并使用GOPROXY环境变量来指示go命令使用该代理。

    \n
  4. \n
  5. 您可以将源代码发布为目录树,并使用使用者文件中的replace指令go.mod将其插入模块图中。

    \n
  6. \n
\n