首页 > 其他分享 >Go中私有库的模块要如何Get呢

Go中私有库的模块要如何Get呢

时间:2025-01-23 15:12:18浏览次数:1  
标签:模块 Get 私有 GONOSUMDB GOPRIVATE Go com example

背景

在go中,模块或者库的拉取通常是使用的git,所以,有时候会出现拉取失败的请况

  1. 通常我们自己的代码可能是在自己的私有代码仓库,当我们需要拉取自己私有仓库中的模块的时候,会发现无法拉取
  2. 在公共代码仓库中的模块或者库是私有的,拉取时,会报无法找到

解决

这里需要依赖三个go中的环境变量

  • GOPRIVATE
  • GONOPROXY
  • GONOSUMDB

GOPRIVATE

GOPRIVATE 是 Go 中一个非常重要的环境变量,用于控制私有模块的行为。
它的作用是告诉 Go 工具链,哪些模块是私有的,从而跳过对这些模块的校验和验证(GOSUMDB)和代理下载(GOPROXY)。

作用

  1. 跳过校验和验证:
    • Go 默认会通过 sum.golang.org 验证模块的校验和。
    • 对于私有模块,sum.golang.org 无法访问,因此需要跳过校验和验证。
  2. 跳过代理下载:
    • Go 默认会通过 GOPROXY 下载模块。
    • 对于私有模块,你可能希望直接从源代码仓库(如 Git)下载,而不是通过代理。
  3. 提高私有模块的访问效率:
    • 设置 GOPRIVATE 后,Go 会直接访问私有模块的源代码仓库,避免不必要的代理和校验步骤。

取值

  • 默认值:空(即所有模块都通过 GOPROXYGOSUMDB 处理)。
  • 设置值:
    • 可以是一个逗号分隔的模块路径列表。
    • 支持通配符 *,例如 *.corp.example.com 表示所有以 corp.example.com 结尾的模块。

设置

方法一:通过命令行设置

go env -w GOPRIVATE=gitee.com/aaa/abc,*.corp.example.com

方法二:通过环境变量设置

在终端中直接设置环境变量:

  • Linux/macOS:
    export GOPRIVATE=gitee.com/aaa/abc,*.corp.example.com
    
  • Windows:
    setx GOPRIVATE gitee.com/aaa/abc,*.corp.example.com
    

使用场景

  1. 私有模块:
    • 如果你的模块托管在私有仓库(如 GitHub Enterprise、GitLab 或 Gitee),需要设置 GOPRIVATE
  2. 本地开发模块:
    • 如果你在本地开发模块并希望直接使用本地路径,可以将其添加到 GOPRIVATE 中。
  3. 自定义模块路径:
    • 如果你使用了自定义的模块路径(如公司内部的模块),可以将其添加到 GOPRIVATE 中。

示例

假设你有一个私有模块托管在 gitee.com/aaa/abc,你可以通过以下方式设置 GOPRIVATE

go env -w GOPRIVATE=gitee.com/aaa/abc

或者设置所有 gitee.com 的模块为私有:

go env -w GOPRIVATE=gitee.com

注意事项

  1. GONOPROXYGONOSUMDB 的关系:
    • 设置 GOPRIVATE 后,Go 会自动将这些模块添加到 GONOPROXYGONOSUMDB 中。
    • 因此,通常不需要单独设置 GONOPROXYGONOSUMDB
  2. 恢复默认值:
    如果你想恢复 GOPRIVATE 的默认值,可以运行:
    go env -u GOPRIVATE
    
  3. 安全性:
    • 设置 GOPRIVATE 后,Go 会跳过对这些模块的校验和验证,因此需要确保这些模块的来源是可信的。

总结

  • GOPRIVATE 用于指定私有模块路径,跳过校验和验证和代理下载。
  • 适用于私有模块、本地开发模块或自定义模块路径。
  • 设置后,Go 会自动处理这些模块的访问逻辑。

GONOSUMDB

在 Go 中,GONOSUMDB 是一个用于控制 Go 模块校验和验证的环境变量。
它的作用是告诉 Go 工具链,哪些模块不需要通过公共校验和数据库(sum.golang.org)进行校验和验证。

作用

Go 模块系统默认会从 sum.golang.org 下载模块的校验和,以确保模块的完整性和安全性。
然而,对于私有模块或无法访问 sum.golang.org 的模块,这种校验和验证可能会导致问题。

通过设置 GONOSUMDB,你可以指定哪些模块不需要进行校验和验证。

取值

  • 默认值:空(即所有模块都需要校验和验证)。
  • 设置值:
    • 可以是一个逗号分隔的模块路径列表。
    • 支持通配符 *,例如 *.corp.example.com 表示所有以 corp.example.com 结尾的模块。

使用场景

  1. 私有模块:
    如果你的模块托管在私有仓库(如 GitHub Enterprise、GitLab 或 Gitee),且无法通过 sum.golang.org 进行校验和验证,可以通过 GONOSUMDB 跳过这些模块的校验。
  2. 离线环境:
    在无法访问 sum.golang.org 的环境中(如内网开发环境),可以禁用校验和验证。
  3. 自定义模块路径:
    如果你使用了自定义的模块路径(如公司内部的模块),可以将其添加到 GONOSUMDB 中。

设置

方法一:通过命令行设置

go env -w GONOSUMDB=example.com,*.corp.example.com

方法二:通过环境变量设置

在终端中直接设置环境变量:

  • Linux/macOS:
    export GONOSUMDB=example.com,*.corp.example.com
    
  • Windows:
    setx GONOSUMDB example.com,*.corp.example.com
    

示例

假设你有一个私有模块托管在 gitee.com/abc/ccc,你可以通过以下方式跳过校验和验证:

go env -w GONOSUMDB=gitee.com/abc/ccc

或者跳过所有 gitee.com 的模块:

go env -w GONOSUMDB=gitee.com

注意事项

  1. 安全性:
    禁用校验和验证会降低模块的安全性,因为 Go 无法验证模块的完整性。请确保你信任这些模块的来源。

  2. GOPRIVATE 的关系:

    • GOPRIVATE 用于指定私有模块路径,同时也会隐式地将这些模块添加到 GONOSUMDB 中。
    • 如果你已经设置了 GOPRIVATE,通常不需要额外设置 GONOSUMDB
  3. 恢复默认值:
    如果你想恢复 GONOSUMDB 的默认值,可以运行:

    go env -u GONOSUMDB
    

总结

  • GONOSUMDB 用于跳过指定模块的校验和验证。
  • 适用于私有模块或无法访问 sum.golang.org 的场景。
  • 设置时需注意安全性,确保模块来源可信。

GONOPROXY

在 Go 中,GONOPROXY 是一个用于控制 Go 模块代理行为的环境变量。
它的作用是告诉 Go 工具链,哪些模块不应该通过配置的模块代理(如 GOPROXY)下载,而是直接从版本控制系统(如 Git、SVN 等)获取。

作用

Go 模块系统默认会通过 GOPROXY 下载模块。
然而,对于某些模块(如私有模块或本地开发模块),你可能希望绕过代理,直接从源代码仓库下载。GONOPROXY 就是用来指定这些模块的。

取值

  • 默认值:空(即所有模块都通过 GOPROXY 下载)。
  • 设置值:
    • 可以是一个逗号分隔的模块路径列表。
    • 支持通配符 *,例如 *.corp.example.com 表示所有以 corp.example.com 结尾的模块。

使用场景

  1. 私有模块:
    如果你的模块托管在私有仓库(如 GitHub Enterprise、GitLab 或 Gitee),且无法通过公共代理(如 proxy.golang.org)下载,可以通过 GONOPROXY 绕过代理。

  2. 本地开发模块:
    如果你在本地开发模块并希望直接使用本地路径,而不是通过代理下载,可以将其添加到 GONOPROXY 中。

  3. 自定义模块路径:
    如果你使用了自定义的模块路径(如公司内部的模块),可以将其添加到 GONOPROXY 中。

设置

方法一:通过命令行设置

go env -w GONOPROXY=example.com,*.corp.example.com

方法二:通过环境变量设置

在终端中直接设置环境变量:

  • Linux/macOS:
    export GONOPROXY=example.com,*.corp.example.com
    
  • Windows:
    setx GONOPROXY example.com,*.corp.example.com
    

示例

假设你有一个私有模块托管在 gitee.com/abc/ccc,你可以通过以下方式绕过代理:

go env -w GONOPROXY=gitee.com/abc/ccc

或者绕过所有 gitee.com 的模块:

go env -w GONOPROXY=gitee.com

注意事项

  1. GOPRIVATE 的关系:

    • GOPRIVATE 用于指定私有模块路径,同时也会隐式地将这些模块添加到 GONOPROXYGONOSUMDB 中。
    • 如果你已经设置了 GOPRIVATE,通常不需要额外设置 GONOPROXY
  2. 恢复默认值:
    如果你想恢复 GONOPROXY 的默认值,可以运行:

    go env -u GONOPROXY
    
  3. 代理配置:
    确保 GOPROXY 配置正确。例如,常用的代理配置是:

    go env -w GOPROXY=https://mirrors.huaweicloud.com/repository/goproxy/
    

总结

  • GONOPROXY 用于指定哪些模块不应该通过代理下载。
  • 适用于私有模块或需要直接从版本控制系统下载的场景。
  • 通常与 GOPRIVATE 一起使用,但也可以单独设置。

私有模块的拉取

配置了上面两个,如果是公开的模块,那就可以拉取了

如果是私有的模块,那就无法拉取,会报错

go: module gitee.com/abc/ccc: git ls-remote -q origin in C:\Go\go\pkg\mod\cache\vcs\95f299bacaa817db5e2ac0e29ef6eb3dec51f2293e970e55dc07d59123c4745c: exit status 128:
        fatal: Cannot prompt because user interactivity has been disabled.
        bash: line 1: /dev/tty: No such device or address
        error: failed to execute prompt script (exit code 1)
        fatal: could not read Username for 'https://gitee.com': No such file or directory
Confirm the import path was entered correctly.
If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.

解决,可以参考 https://golang.org/doc/faq#git_https

$HOME 目录下创建文件 .netrc

写入

machine 仓库域名 login 用户名 password 私人令牌

私人令牌可在自己的代码仓库中获取

设置示例

machine gitee.com login abc password xxxxxxxxxxxxxxxxxxxxxxxxxx

然后基本上就可以拉取了

标签:模块,Get,私有,GONOSUMDB,GOPRIVATE,Go,com,example
From: https://www.cnblogs.com/guangdelw/p/18687793

相关文章

  • c++迷宫问题(migong)
    今天的题目叫“迷宫问题(migong)”,是“DFS深度优先搜索递归”一类的。题目描述设有一个N*N(2<=N<10)方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中分别放0和1,0表示可通,1表示不能,入口和出口处肯定是0。迷宫走的规则如下所示:即从某点开始,有八个方向可走,前进方格中数......
  • 【发现一个问题】go test的时候,在macos arm64 下不明原因的发生异常,但是在linux下完全
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯这只是一个简单的队列,在单个协程中运行,莫名其妙就panic了,而且堆栈信息中找不到有用信息。同样的程序在linux中执行又是对的。暂时想不明白是为什么。Runningt......
  • Golang笔记——静态强类型、编译型、并发型语言
    大家好,这里是GoodNote,关注公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Go语言的基础知识,包括数据类型,深浅拷贝,编程范式,Go语言是一种静态(静态类型语言和静态语言)强类型、编译型、并发型,并具有垃圾回收功能的编程语言。文章目录1.Go语言基础知识数据类型......
  • 打卡信奥刷题(651)用C++信奥P8396[普及组/提高] [CCC2022 S2] Good Groups
    [CCC2022S2]GoodGroups题目背景请注意:这道题是CCO2022J4GoodGroups的加强版。管理备注:似乎没有加强。题目描述一个班级会被分成ggg个组,每个组有三个人,这......
  • go操作kafka
    1、创建kafka使用DockerCompose快速搭建,windows使用dockerdesktop部署,linux使用docker部署以linux为例:创建docker-compose.yml文件,搭建单节点zookeeper和单节点kafka环境,并且在8080端口提供kafka-ui管理界面。docker-compose.ymlversion:'2.1'services:zoo1:imag......
  • ChatGPT 摘要,以 ESS 作为你的私有数据存储
    作者:来自Elastic Ryan_Earle本教程介绍如何设置Elasticsearch网络爬虫,将网站索引到Elasticsearch中,然后利用ChatGPT使用我们的私人数据来总结对其提出的问题。Python脚本的GithubRepo:https://github.com/Gunnerva/elastic_chatgpt/目标:了解如何使用Elasticsea......
  • 最新毕设-Django-新能源汽车推荐系统-30063(免费领项目)可做计算机毕业设计JAVA、PHP、
    摘要本论文主要论述了如何基于Django框架开发一个新能源汽车推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,爬取懂车帝的汽车信息,面向对象编程思想进行项目开发。在引言中,作者将论述新能源汽车推荐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,......
  • 如何在织梦CMS中修改网站logo?
    织梦CMS是一种功能强大的内容管理系统,修改网站logo相对简单。以下是详细的步骤:备份文件: 在进行任何修改之前,确保备份网站的logo文件。准备新logo: 准备一个新的logo图片,确保图片格式为PNG或JPEG,并且大小适合网站的需求。上传新logo: 使用FTP工具(如FileZilla)连接到服务器,将新l......
  • 请问如何在织梦CMS中修改网站logo?
    织梦CMS是一种功能强大的内容管理系统,修改网站logo相对简单。以下是详细的步骤:备份文件: 在进行任何修改之前,确保备份网站的logo文件。准备新logo: 准备一个新的logo图片,确保图片格式为PNG或JPEG,并且大小适合网站的需求。上传新logo: 使用FTP工具(如FileZilla)连接到服务器,将新l......
  • go语言中的ew函数介绍
    在Go语言中,new是一个内建函数,用于分配内存并返回一个指向新分配的零值的指针。其主要作用是创建一个类型为T的新变量,并初始化为该类型的零值,返回指向这个变量的指针。它的语法和基本使用方法如下:new函数的基本语法new(T)T是你想要创建的新变量的类型。new(T)返回的......