golang中包无法引入问题解决

目录
  • 前言
  • 问题背景
  • 问题现象
  • 问题解决
    • 1、强制开启GO111MODULE
    • 2、切换代理
  • 问题总结

前言

刚接触golang不久,有些环境无法融会贯通,现在针对开发过程中遇到的问题做个排查记录

问题背景

开发环境区分不同网段,同一个程序引入到另一个环境后,对应的包无法下载

问题现象

程序导入另一个环境后,初始化操作就是下载包:执行go mod tidy后,出现下面错误

go: github.com/Sirupsen/logrus@v1.0.1: Get " https://proxy.golang.org/github.com/Sirupsen/logrus/@v/v1.0.1.mod": dial tcp: lookup proxy.golang.org : no such host

或者出现以下错误

go: github.com/Sirupsen/logrus@v1.0.1: Get " https://proxy.golang.org/github.com/Sirupsen/logrus/@v/v1.0.1.mod": dial tcp: lookup proxy.golang.org : getaddrinfow: This is usually a temporary error during hostname resolution and means that the local server did not receive a response from an authoritative server

查看go.mod后,发现很多报红,无法下载对应的版本包,查阅相关资料,对go.mod有了一个深入了解

go.mod文件定义module路径以及列出其他需要在build时引入的模块的特定的版本。

module go_start

go 1.18

require (
    github.com/fsnotify/fsnotify v1.6.0
    github.com/gin-gonic/gin v1.8.1
    github.com/go-sql-driver/mysql v1.6.0
    github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
    github.com/shirou/gopsutil v2.21.11+incompatible
    github.com/spf13/viper v1.14.0
    github.com/valyala/fasthttp v1.40.0
    github.com/vkcom/engine-go v0.0.0-20181122144534-e2cc962e10cc
    github.com/wxnacy/wgo v1.0.4
    go.uber.org/zap v1.23.0
    gopkg.in/yaml.v3 v3.0.1
)

如上go.mod文件:声明go_start路径作为module的根目录;go的运行版本为1.18;同时也声明了module依赖特定版本的github.com/fsnotify/fsnotify v1.6.0和github.com/gin-gonic/gin v1.8.1等等

问题解决

根据报错,尝试举措如下

1、强制开启GO111MODULE

go env -w GO111MODULE=on

GO111MODULE开启和关闭对Go的包无论是导入,还是下载使用,都有着非常大的区别,老版本可以说就没有包管理器,无法实现类似npm install或者pip install -r requirements这样的自动导入所有需要的包。并且go项目也被限制在了go的PATH文件夹中,导入也需要写较长的路径,十分不方便。GO111MODULE的出现就是用来解决上述所有的问题。

2、切换代理

查询了一下当前环境的GOPROXY地址:

go env GOPROXY
> http://另一个网段网络:端口/仓库地址/,direct

执行命令:

go env -w GOPROXY=http://另一个网段网络:端口/仓库地址/,direct

重新执行命令go mod tidy,完美通过!

问题总结

切换另一个环境时,原来环境变量的GOPROXY被删除了,导致引入的程序无法下载对应的包,所以重新设置GOPROXY即可

到此这篇关于golang中包无法引入问题解决的文章就介绍到这了,更多相关golang 包无法引入内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • goLang引入自定义包的方法

    看完golang的基本语法后,为了模块化编程,试用了下golang的包管理,结果真踩了几个坑,总结一下吧. 一. 设置$GOPATH环境变量 golang和C或php不一样,不会自动查找当前路径下的文件,必须先在$GOAPTH里添加自己工程的路径: 二. 自定义包里面对外提供的API函数,首字母必须大写 如:func api() string {return "hello api!"}则不能被包外的函数检测到: 应改为:func Api() string {return "h

  • golang中包无法引入问题解决

    目录 前言 问题背景 问题现象 问题解决 1.强制开启GO111MODULE 2.切换代理 问题总结 前言 刚接触golang不久,有些环境无法融会贯通,现在针对开发过程中遇到的问题做个排查记录 问题背景 开发环境区分不同网段,同一个程序引入到另一个环境后,对应的包无法下载 问题现象 程序导入另一个环境后,初始化操作就是下载包:执行go mod tidy后,出现下面错误 go: github.com/Sirupsen/logrus@v1.0.1: Get " https://proxy.gola

  • docker(alpine+golang) 中 hosts 不生效问题解决方法

    目录 一.问题 二.解决 方法一.增加配置 方法二.映射配置 方法三.修改镜像 知识点延伸 一.问题 把使用 golang 开发的服务程序部署在以 alpine 为基础镜像的容器中,设置了 /etc/hosts,却没有生效,但是在终端中使用 ping 和 curl 域名都可以正常访问. 二.解决 出现上述问题的根本原因是 DNS 解析顺序不一致导致的,在 alpine 中,linux 系统默认跳过 hosts 配置,直接使用机器的 DNS 服务.因此,有如下三种解决方法. 方法一.增加配置 修改

  • 如何理解Python中包的引入

    Python的from import *和from import *,它们的功能都是将包引入使用,但是它们是怎么执行的以及为什么使用这种语法呢? 从一模块导入全部功能 from import * means意味着"我希望能访问中我有权限访问的全部名称".例如以下代码something.py: # something.py public_variable = 42 _private_variable = 141 def public_function(): print("I'm

  • Golang通过包长协议处理TCP粘包的问题解决

    tcp粘包产生的原因这里就不说了,因为大家能搜索TCP粘包的处理方法,想必大概对TCP粘包有了一定了解,所以我们直接从处理思路开始讲起 tcp粘包现象代码重现 首先,我们来重现一下TCP粘包,然后再此基础之上解决粘包的问题,这里给出了client和server的示例代码如下 /* 文件名:client.go client客户端的示例代码(未处理粘包问题) 通过无限循环无时间间隔发送数据给server服务器 server将会不间断的出现TCP粘包问题 */ package main import

  • 详解golang中bufio包的实现原理

    最近用golang写了一个处理文件的脚本,由于其中涉及到了文件读写,开始使用golang中的 io 包,后来发现golang 中提供了一个bufio的包,使用这个包可以大幅提高文件读写的效率,于是在网上搜索同样的文件读写为什么bufio 要比io的读写更快速呢?根据网上的资料和阅读源码,以下来详细解释下bufio的高效如何实现的. bufio 包介绍  bufio包实现了有缓冲的I/O.它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文

  • Golang中的path/filepath包用法

    path/filepath包下的相关函数 1. ToSlash函数 func ToSlash(path string) string 功能:将path中平台相关的路径分隔符转换成'/' 例如:windows当前路径: D:\gopro\src\study,转换之后D:/gopro/src/study 2. FromSlash函数 func FromSlash(path string) string 功能:将 path 中的 '/' 转换为系统相关的路径分隔符 3.Dir函数 func Dir(p

  • 解决golang中container/list包中的坑

    golang中list包用法可以参看这篇文章 但是list包中大部分对于e *Element进行操作的元素都可能会导致程序崩溃,其根本原因是e是一个Element类型的指针,当然其也可能为nil,但是golang中list包中函数没有对其进行是否为nil的检查,变默认其非nil进行操作,所以这种情况下,便可能出现程序崩溃. 1.举个简单例子 Remove()函数 package main import ( "container/list" "fmt" ) func

  • Golang中的包及包管理工具go mod详解

    目录 一.包 二.包管理工具go mod 三.init函数 四.使用第三方包 一.包 1.包的种类:系统内置包.自定义包.第三方包. (1)系统内置包:go语言自带包,如str.conv.fmt等 (2)自定义包:开发者自己写的包 (3)第三方包:属于自定义包的一种,需下载到本地才能使用, 如可以从GitHub上下载的第三方包. 2.包是多个go源文件的集合,一个package下可以有多个go文件,归属于同一package 二.包管理工具go mod 1.在go的1.11版本之前如果想自定义包需

  • 一文详解Golang中net/http包的实现原理

    目录 前言 http包执行流程 http包源码分析 端口监听 请求解析 路由分配 响应处理 前言 Go语言自带的net/http包提供了HTTP客户端和服务端的实现,实现一个简单的http服务非常容易,其自带了一些列结构和方法来帮助开发者简化HTTP服务开发的相关流程,因此我们不需要依赖任何第三方组件就能构建并启动一个高并发的HTTP服务器,net/http包在编写web应用中有很重要的作用,这篇文章会学习如何用 net/http 自己编写实现一个 HTTP Server 并探究其实现原理,具体

  • golang中time包之时间间隔格式化和秒、毫秒、纳秒等时间戳格式输出的方法实例

    目录 获取当前时间的年.月.日.时.分.秒的方法如下: 获取从1970到现在经过的时间的方法如下: 时间间隔格式化输出方法: 总结 获取当前时间的年.月.日.时.分.秒的方法如下: // 获取当前时间 now := time.Now() // 当前时间的年.月.日.小时.分钟.秒和纳秒都可以通过现有接口直接获取 year := now.Year() month := now.Month() day := now.Day() hour := now.Hour() minute := now.Min

随机推荐