Go 私有包环境配置

换了台开发机,重新配置 Go 开发环境。顺便就私有包的

  • 开发环境
  • 打包环境

配置做个小结。

环境变量

完成安装 Go 语言开发包后,即可通过 go env 命令检查 Go 开发的默认环境变量设置。对于配置私有开发包环境变量,主要需要注意以下环境变量的设置。

以个人私有包路径 github.com/x-mod 为例,设置 export GOPRIVATE="github.com/x-mod" 后。私有包相关的几个环境变量[GONOPROXY, GONOSUMDB]也会发生改变。

$: go env
...
GOBIN="${HOME}/go/bin"
GONOPROXY="github.com/x-mod"
GONOSUMDB="github.com/x-mod"
GOPRIVATE="github.com/x-mod"
GOPROXY="https://goproxy.cn,direct"
GOROOT="${HOME}/go"
GOSUMDB="sum.golang.org"

git 配置

除了基础的环境变量配置以外,还需要设置 git 设置。因为,默认情况下包拉取相关命令,如 go get 命令,均会使用到 git 命令进行包拉取。对于私有包而言,通常是需要提供用户鉴权信息才可以顺利拉取。

以个人私有包路径 github.com/x-mod 为例,为了从 github.com 拉取私有包,有两种方式进行鉴权。

ssh 密钥方式

为了让 go get 通过 ssh 密钥的方式拉包,需要进行如下配置:

$: git config --global url."[email protected]".insteadOf "https://github.com"

https 方式更换成 ssh 方式。

同时,需要将个人电脑中生成的 ssh 密钥的公钥信息添加到 github.com 的个人设置中。

https 认证方式

ssh 密钥方式虽然简单,但是这种针对 git 的全局性修改,可能会影响到其他开发工具拉包的问题。

如果同一台电脑还会进行 xcode 苹果开发的,在 xcode 中拉取 package 就会受到影响。

所以,对于 git 的拉包方式还是使用 https 协议,但仅仅增加用户鉴权即可,这样就不会影响到其他开发工具。

首先,在 github.com 的个人设置页中生成 Personal Access Token 授权码。

再进行如下配置即可:

$: git config --global url."https://${user}:${personal_access_token}@github.com".insteadOf "https://github.com"

打包环境

上面的配置仅适用于开发环境,如果想在打包 (ci/cd) 环境配置私有包,也可以通过类似原理进行配置。

简单贴一个 Dockerfile 的配置如下:

FROM golang:1.18-stretch as builder

COPY . /app

# Add the keys
ARG github_user
ENV github_user=$github_user
ARG github_personal_token
ENV github_personal_token=$github_personal_token

WORKDIR /app/cmd/webapp

RUN git config \
    --global \
    url."https://${github_user}:${github_personal_token}@@github.com".insteadOf \
    "https://github.com"

RUN GIT_TERMINAL_PROMPT=1 \
    GOARCH=amd64 \
    GOOS=linux \
    CGO_ENABLED=0 \
    go build -v --installsuffix cgo --ldflags="-s" -o myapp

# ---------------------------------------------------------------------
#  The second stage container, for running the application
# ---------------------------------------------------------------------
FROM alpine:3.8
COPY --from=builder /app/cmd/webapp/myapp /app/myapp

WORKDIR /app

ENTRYPOINT ["/myapp"]

其实就是在容器中提前设置好私有包的鉴权信息即可。

← Go SQLite3 & SQLCipher 集成 None

评论