408. 【go-语言】使用私有仓库的-go-module

  • Post author:
  • Post category:其他


我们使用 go 语言时,现在用的

go mod

初始化项目比较多。现在问题来了,

我们经常使用 github 上的 go module,那如何使用我们自己私有仓库里的 go module 呢?



一、go mod 初始化项目

go mod init proxy.qijing.com/share/go-sql-driver/my_module

注意:

go mod init

后面的参数,就是我们在项目中引用的参数,举个例子如下,

import (
	_ "proxy.qijing.com/share/go-sql-driver/my_module" // 对应这个地方。
	"database/sql"
	"time"
)



二、git 初始化项目

git init
git add .
git commit -m 'init'



三、推送项目到 git 仓库

git push --set-upstream http://proxy.qijing.com/share/go-sql-driver/my_module.git master



四、修改环境变量



环境变量说明:

  1. GOPROXY – 国内一般都要有
  2. GOINSECURE – 仓库不支持 https 访问时,需要加上
  3. GOPRIVATE – 告诉 go 语言,我们的

    module

    是来自私有仓库的

上面几步弄完之后,就可以在其他项目中引用

my_module

这个项目了,很方便。



五、进阶


对于带端口号的私有仓库

,需要用 nginx 做代理,构造假的请求,去满足规则,配置文件如下:


# user  nobody;
worker_processes  1;

# error_log  logs/error.log;
# error_log  logs/error.log  notice;
# error_log  logs/error.log  info;

# pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    # log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                   '$status $body_bytes_sent "$http_referer" '
    #                   '"$http_user_agent" "$http_x_forwarded_for"';

    # access_log  logs/access.log  main;

    sendfile        on;
    # tcp_nopush     on;

    # keepalive_timeout  0;
    keepalive_timeout  65;

    # gzip  on;

	server {
		listen 80;
		server_name proxy.qijing.com;
		
		#  伪造goget响应,使得内部验证规则通过
		if ($args ~* "^go-get=1") {
		  set $condition goget;
		}
		if ($uri ~ ^/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)*$) {
		  set $condition "${condition}path";
		}
		if ($condition = "gogetpath") {
		  return 200 "<!DOCTYPE html><html><head><meta content='proxy.qijing.com/$1/$2/$3 git http://proxy.qijing.com/$1/$2/$3.git' name='go-import'></head></html>";
		}

		location / {
				proxy_pass http://proxy.qijing.com:10000;
		}

	}
}

注意:如果 go mod 的初始化路径只有两层,比如:

go mod init proxy.qijing.com/go-sql-driver/my_module

则配置文件中的

/$1/$2/$3

需要改成

/$1/$2

同时修改本地

host

文件,新增如下域名映射:

127.0.0.1 proxy.qijing.com



版权声明:本文为qq_36073886原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。