gpt4 book ai didi

项目的 Golang 工作区

转载 作者:IT王子 更新时间:2023-10-29 02:33:04 27 4
gpt4 key购买 nike

我有一个 golang 项目,我把代码放在 git 服务器的某个地方。我所有的代码现在都在 $GOPATH/mygitserver/folder/上。

在 gitserver 更改 url 之前一切都是好的,所以我需要将所有导入替换为新的 gitserver url。所以,我不想以后再拥有它,想改变它的工作方式。

所以现在我计划将整个工作区上传到 git(不包括外部库),而不是只将包推送到我的 git 服务器。所以,我将有一个包直接到 src 文件夹(例如:src/mypackage)。所以,当我更改 gitserver url 时,一切仍然有效。

问题是:这样做(将工作区上传到 git)是一个好习惯吗?或者我们还有其他选择吗?

而且它还带来了另一个以前不存在的问题。因此,在克隆工作区后,我必须为项目使用的所有库调用“go get”。 (这以前不会发生,因为当我调用 go get mygitserver/package 时,Golang 会自动下载依赖项)。有什么方法可以让所有的依赖项只用一个命令下载吗?

最佳答案

如果您希望您的服务器频繁移动,一种可能的解决方案是使用 vanity import path .

个性化导入路径允许您将代码保存在您拥有的域的导入路径中,这会将您重定向到存储代码的位置。例如,如果您在 Bitbucket 上托管您的代码,但担心您将来可能会搬家,并且您拥有域 example.net,您可以托管您的代码,这样您就可以使用 import "example.net/myproject" 并且在后台 go get 工具将从 Bitbucket 获取它。为此,您必须在您想要的域上提供包含以下形式的自定义元标记的文档:

<meta name="go-import" content="import-prefix vcs repo-root">

因此,例如在 example.net/myproject 提供以下 HTML 文件将重定向 go get 以克隆提供的 Bitbucket URL(它当然也可以指向任何其他 Git 服务,包括您自己的):

<meta name="go-import" content="example.net/myproject git https://bitbucket.org/myname/myproject.git">

要配置 Nginx 以提供这些重定向服务,可以使用如下配置(当然,将 myPackage 和 URL 替换为您的项目名称和 URL):

location ~ /myPackage/[a-z][a-z0-9]* {
if ($args = "go-get=1") {
add_header Content-Type text/html;
return 200 '<meta name="go-import" content="$host/myPackage git https://bitbucket.org/myName/myPackage.git">';
}
rewrite ^ https://mygithosting.example.org/myName/myPackage? permanent;
}
location ~ /myPackage$ {
if ($args = "go-get=1") {
add_header Content-Type text/html;
return 200 '<meta name="go-import" content="$host/myPackage git https://mygithosting.example.org/myName/myPackage.git">';
}
rewrite ^ https://mygithosting.example.org/myName/myPackage? permanent;
}

现在,无论何时移动 Git 服务器,您只需更改元标记中的 URL。

如果您担心某些用户直接从您的 Git 服务器导入而其他用户使用虚导入路径,您也可以将此路径设置为包规范导入路径。规范的导入路径被指定为 Go 程序的一个文件中 package 行的特殊注释(哪个文件无关紧要)。它们看起来像这样:

import mypackage // import "example.com/mypackage"

现在,如果上面的代码实际上托管在其他地方并且有人试图直接导入它,go get 会报错:

$ 去获取 mygithosting.example.org/myName/myPackage包 mygithosting.example.org/myName/myPackage:目录/go/mygithosting.example.org/myName/myPackage 中的代码需要导入“example.com/mypackage”

关于项目的 Golang 工作区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40209254/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com