在做 go 开发, 如果是使用 go1.11 版本, 相信大家都会使用到 go mod 做为依赖管理, 因为 go mod 可以设置代理,国外的包,轻松下载. 但是在某一天你使用公司自建的 gitlab ,需要引用 gitlab 上面的依赖包,就需要做一些设置才会正常 go mod tidy,否则会出现无法引用的问题. 本文介绍一下如何操作.

适用于 window, linux 环境, 本人没 macOSX

你将学到:

  1. 如何设置 go mod 代理
  2. 如何设置 go env GOPRIVATE 变量
  3. 如何在代码里引用自建的 gitlab 依赖代码

设置 go mod 代理

linux, window 设置

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

实践

假定私有 gitlab 仓库地址为: http://mygit.sgfoot.com/ (注意只支持http, 不支持https)

创建一个 gitlab 依赖代码

  1. 仓库地址HTTP: http://mygit.sgfoot.com/common.git
  2. 仓库地址SSH: git@mygit.sgfoot.com/common.git
  3. git 下载
# 先进入 $GOPATH/src 目录
cd $GOPATH/src 
git clone git@mygit.sgfoot.com/helloworld.git mygit.sgfoot.com/common
  1. 创建 util.go 文件

    必须在这个目录下创建文件 $GOPATH/src/mygit.sgfoot.com/common

    package common
    
    import "time"
    
    func Today() string {
    	return time.Now().Format("2006-01-02 15:04:05")
    }
    
  2. 使用 go mod init

    如果没有外部依赖可以不使用 go mod 也是可以的.

    # 直接回车
    go mod init 
    

    会在项目的根目录下生成 go.mod 文件, 第一行必须是你的网站域名+你的项目路径. 也就是可以在浏览器里找到这个项目. 否则后续无法使用go mod tidy命令.

    go.mod 文件内容

    module mygit.sgfoot.com/common
    
  3. 使用 go mod tidy

    module mygit.sgfoot.com/common
    go 1.15
    
  4. 使用 git tag

    为什么使用 tag, 方便其它项目引用不同版本号.

    git add . && git commit -m "new hello" && git push -u origin master
    git tag v1.0.0 && git push --tag
    
  5. git tag 扩展学习

    https://yezihack.github.io/git-tag.html

创建一个工程项目

引用上面的 mygit.sgfoot.com/common 里的方法

  1. 创建 helloworld 项目
  2. 仓库地址HTTP: http://mygit.sgfoot.com/helloworld.git
  3. 仓库地址SSH: git@mygit.sgfoot.com/helloworld.git
  4. git 下载(可以是任意目录下)
git clone git@mygit.sgfoot.com/helloworld.git
  1. 创建 main.go

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"mygit.sgfoot.com/common"
    )
    
    func main() {
    	r := gin.Default()
    	r.GET("/", func(c *gin.Context) {
    		c.JSON(200, gin.H{
    			"msg":"hello world",
    			"today": common.Today(),
    		})
    	})
    	r.Run(":8000")
    }
    
  2. 使用 go mod init

    这里可以自定义 mod name

    # 直接回车
    go mod init helloworld
    

    go.mod 文件内容

    module helloworld
    
  3. 设置 go env GOPRIVATE

    设置 gitlab 不走代理

    go env -w GOPRIVATE=mygit.sgfoot.com
    

    go get 不走 https

    注意使用版本号.

    go get -v -insecure mygit.sgfoot.com/common@v1.0.0
    
  4. 使用 go mod tidy

    module helloworld
    go 1.15
    
    require (
    	github.com/gin-gonic/gin v1.6.3
    	mygit.sgfoot.com/common v1.0.0
    )
    

简约总结

1. 设置 GOPRIVATE

go env -w GOPRIVATE=mygit.sgfoot.com

或 设置环境变量
export GOPRIVATE=mygit.sgfoot.com

2. 使用-insecure

忽略 https

go get -v -insecure mygit.sgfoot.com/common

3. 保存 git 输入的帐号和密码

git config --global credential.helper store