分类 "其他" 下的文章

拉取私有仓库报错

本地开发环境的golang版本是1.15,原本我以为是自己没有仓库的权限(公司的项目)。但是加了还是不行,也设置了GOPRIVATE。但还是不行,看了网上很多的帖子说要设置git。但是说得也不清楚,有点知其然而不知其所以然。

go get gitlab.xxx.com/advertise/go-modules: module gitlab.xxx.com/advertise/go-modules: reading https://goproxy.io/gitlab.xxx.com/advertise/go-modules/@v/1.1.1: 404 Not Found

终于看到这篇文章,总算是清楚了。特此记录下来!以下内容来自转载的文章。

直接使用 go get

直接使用 go get ... 添加私有仓库依赖时,会出现以下错误:

get "gitlab.com/xxx": found meta tag get.metaImport{Prefix:"gitlab.com/xxx", VCS:"git", RepoRoot:"https://gitlab.com/xxx.git"} at //gitlab.com/xxx?go-get=1
go get gitlab.com/xxx: git ls-remote -q https://gitlab.com/xxx.git in /Users/sulin/go/pkg/mod/cache/vcs/91fae55e78195f3139c4f56af15f9b47ba7aa6ca0fa761efbd5b6e2b16d5159d: exit status 128:
    fatal: could not read Username for 'https://gitlab.com': terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.

从错误信息可以明显地看出来,我们使用私有仓库时通常会配置ssh-pubkey进行鉴权,但是go get使用https而非ssh的方式来下载依赖,从而导致鉴权失败。

GOPROXY错误

如果配置了GOPROXY代理,错误信息则是如下样式:

go get gitlab.com/xxx: module gitlab.com/xxx: reading https://goproxy.io/gitlab.com/xxx/@v/list: 404 Not Found

P.S:这个就是我遇到的问题o(╥﹏╥)o

1.13 版本解决方案

在1.13版本之后,前面介绍的解决方案又会导致go get出现另一种错误:

get "gitlab.com/xxx/zz": found meta tag get.metaImport{Prefix:"gitlab.com/xxx/zz", VCS:"git", RepoRoot:"https://gitlab.com/xxx/zz.git"} at //gitlab.com/xxx/zz?go-get=1
  verifying gitlab.com/xxx/zz@v0.0.1: gitlab.com/xxx/zz@v0.0.1: reading https://sum.golang.org/lookup/gitlab.com/xxx/zz@v0.0.1: 410 Gone

这个错误是因为新版本go mod会对依赖包进行checksum校验,但是私有仓库对sum.golang.org是不可见的,它当然没有办法成功执行checksum。

也就是说强制git采用ssh的解决办法在1.13版本之后GG了。

当然Golang在堵上窗户之前,也开了大门,它提供了一个更方便的解决方案:GOPRIVATE环境变量。解决以上的错误,可以这样配置:

export GOPRIVATE=gitlab.xxx.com/advertise/go-modules

# 1.15版本以后可以用以下命令设置 go 环境变量
go env -w GOPRIVATE=gitlab.xxx.com/advertise/go-modules

它可以声明指定域名为私有仓库,go get在处理该域名下的所有依赖时,会直接跳过GOPROXYCHECKSUM等逻辑,从而规避掉前文遇到的所有问题。

另外域名gitlab.com/xxx非常灵活,它默认是前缀匹配的,所有的gitlab.com/xxx前缀的依赖模块都会被视为private-modules,它对于企业、私有Group等有着一劳永逸的益处。

提示:如果你通过ssh公钥访问私有仓库,记得配置git拉取私有仓库时使用ssh而非https。

可以通过命令git config ...的方式来配置。也可以像我这样,直接修改~/.gitconfig添加如下配置:

[url "git@gitlab.meiyou.com:"]
    insteadof = https://gitlab.meiyou.com/
[url "git@github.com:"]
    insteadof = https://github.com/
[url "git@gitlab.com:"]
    insteadof = https://gitlab.com/

即可强制go get针对github.com与gitlab.com使用ssh而非https。

文章转载自:Go填坑之将Private仓库用作module依赖

# 可以是容器的ID,也可以是容器的名称
docker inspect {容器ID}
# 比如查看名称为myphp7.2的container
docker inspect myphp7.2
# "IPAddress": "172.17.0.2"

符号说明编码(实际使用中需要去掉加号)
左箭头&+larr;
右箭头&+rarr;
上箭头&+uarr;
下箭头&+darr;
水平箭头&+harr;
竖直箭头&+varr;
双线左箭头&+lArr;
双线右箭头&+rArr;
双线上箭头&+uArr;
双线上箭头&+dArr;
双线水平双箭头&+hArr;
双线竖直箭头&+vArr;

域名服务商

网上一致为namesilo打call,我总结了以下几点原因:

  1. 便宜,最简单粗暴的原因之一也是极其重要的一点。.com 域名注册一年 $6.89(¥43.72,$1=¥6.35目前的汇率);还有$1.00的优惠券 可以用
  2. 终身免费隐私保护,相比 godaddy ¥60.00/年/域名 简直是业界良心
  3. 续费和首次购买一样的价格,这又要和 godaddy 比个高低;虽然 godaddy .com 域名注册第 1 年 ¥12.98,之后续费 ¥101.00,涨了这么多倍,不然从长远来看不如namesilo实诚,除非你只打算玩一年
  4. 支付支付宝付款。P.S. 感谢马爸爸

选好服务商之后,便是开始纠结域名。好在一开始便试了下 中文名字简写.me 出乎意料可以注册,任性拍板。将xx.com, xx.me, xx.cn...拍死在摇篮中。

阅读全文