golang 如何自动下载所有依赖包

如何自动下载所有依赖包?

大部分情况下大家下载 Go 项目都是使用go get命令,它除了会下载指定的项目代码,还会去下载这个项目所依赖的所有项目。

但是有的时候我们的项目由于各种原因并不是通过go get下载的,是通过git clone下载的,这样代码下下来就没有依赖包了,没办法编译通过的。

这样的话怎么办呢?

go get -d -v ./...

-d标志只下载代码包,不执行安装命令;

-v打印详细日志和调试日志。这里加上这个标志会把每个下载的包都打印出来;

./...这个表示路径,代表当前目录下所有的文件。

补充:goland自动下载所有依赖

项目中使用了go.mod时可以使用以下命令自动下载全部依赖

方法一

go get -d -v ./...

方法二

go mod tidy

补充:go mod 无法自动下载依赖包的问题

go 11以后启用了go mod功能,用于管理依赖包。

当执行go mod init生成go.mod文件之后,golang在运行、编译项目的时候,都会检查依赖并下载依赖包。

在启动了go mod之后,通过go mod下载的依赖包,不在放在GOPATH/src中,而是放到GOPATH/pkg/mod中。

比如我当前的GOPATH=/root/go,我在/root/goProjects/下新建了一个项目gProject1,并在项目下编写了一些代码,引用了一些第三方包:

echo $GO111MODULE

auto

mkdir /root/goProjects/gProject1

cd /root/goProjects/gProject1

vi main.go

cat main.go

package main
import (
 "log"

 "github.com/toolkits/smtp"
)

func main() {
 //s := smtp.New("smtp.exmail.qq.com:25", "notify@a.com", "password")
 s := smtp.NewSMTP("smtp.exmail.qq.com:25", "notify@a.com", "password",false,false,false)
 log.Println(s.SendMail("notify@a.com", "ulric@b.com;rain@c.com", "这是subject", "这是body,<font color=red>red</font>"))
}

go mod init gProject1

go: creating new go.mod: module gProject1

-cat go.mod

module gProject1
go 1.12
yzc:gProj

go run main.go

如果此时报错:

build command-line-arguments: cannot load github.com/toolkits/smtp: cannot find module providing package github.com/toolkits/smtp

原因是因为git版本较低,go get 无法通过git下载github.com/toolkits/smtp到指定路径。

你可以手动执行一下go get github.com/toolkits/smtp,发现会报一个类似这样的错误:

# go get github.com/toolkits/smtp
go get github.com/toolkits/smtp: git ls-remote -q https://github.com/toolkits/smtp in /root/go/pkg/mod/cache/vcs/7028097e3b6cce3023c34b7ceae3657ef3f2bbb25dec9b4362813d1fadd80297: exit status 129:
usage: git ls-remote [--heads] [--tags] [-u <exec> | --upload-pack <exec>] <repository> <refs>...

就是git版本太低了,无法支撑go get运行git时的参数调用。

升级git

macos:

brew upgrade git

centos6/7

Remove old git

sudo yum remove git*

centos6:

sudo yum -y install  https://centos6.iuscommunity.org/ius-release.rpm

centos7:

sudo yum -y install  https://centos7.iuscommunity.org/ius-release.rpm

sudo yum -y install git2u-all

再次执行go run main.go:

go: finding github.com/toolkits/smtp latest
go: downloading github.com/toolkits/smtp v0.0.0-20190110072832-af41f29c3d89
go: extracting github.com/toolkits/smtp v0.0.0-20190110072832-af41f29c3d89
2019/07/27 16:15:52 535 Error: ��ʹ����Ȩ���¼�������뿴: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • golang使用 gomodule 在公共测试环境管理go的依赖的实例详解

    背景:调试服务最好的方式就是直接上机实践.对在公司的员工来说,在同一套服务上协同开发比在单独的环境上开发,应该会更有感觉.有问题可以一起发现并解决,也能够一同开发需求. 但是,公司的测试机往往是没办法连外网的,而golang 的大部分工程都需要直接从github 上下载依赖,这就导致 依赖文件需要先提前上传到开发机上.那么当开发机上需要运行多个golang 工程的时候,如何共享这些依赖,减少维护依赖库的工作量呢? 这也是需要大家协作完成的- 最终总结:项目采用 go module + vendo

  • 解决vscode中golang插件依赖安装失败问题

    vscode中安装ms-vscode.go插件后可以开启对go语言的支持,ms-vscode.go插件需要依赖一些工具,安装完成后提示 gocode go-outline go-symbols guru gorename gocode-gomod goreturns golint Installing github.com/ramya-rao-a/go-outline FAILED 由于网络原因,一些依赖工具无法正常安装,需要进行手动安装. 以下为手动安装的工具的步骤: 在%GOPATH%\sr

  • golang不到30行代码实现依赖注入的方法

    本文介绍了golang不到30行代码实现依赖注入的方法,分享给大家,具体如下: 项目地址 go-di-demo 本项目依赖 使用标准库实现,无额外依赖 依赖注入的优势 用java的人对于spring框架一定不会陌生,spring核心就是一个IoC(控制反转/依赖注入)容器,带来一个很大的优势是解耦.一般只依赖容器,而不依赖具体的类,当你的类有修改时,最多需要改动一下容器相关代码,业务代码并不受影响. golang的依赖注入原理 总的来说和java的差不多,步骤如下:(golang不支持动态创建对

  • golang 如何自动下载所有依赖包

    如何自动下载所有依赖包? 大部分情况下大家下载 Go 项目都是使用go get命令,它除了会下载指定的项目代码,还会去下载这个项目所依赖的所有项目. 但是有的时候我们的项目由于各种原因并不是通过go get下载的,是通过git clone下载的,这样代码下下来就没有依赖包了,没办法编译通过的. 这样的话怎么办呢? go get -d -v ./... -d标志只下载代码包,不执行安装命令: -v打印详细日志和调试日志.这里加上这个标志会把每个下载的包都打印出来: ./...这个表示路径,代表当前

  • go自动下载所有的依赖包go module使用详解

    今天在学习dubbo-go的时候,下载了dubbo-go的example,依赖的包太多了,之前都是手动下载某个依赖的包,现在手动一个一个 go get 那太麻烦了.因为我是搞java的,刚开始用go的时候感觉有点奇怪,go代码所依赖的所有的第三方库都放在GOPATH这个目录下面,这就导致了同一个库只能保存一个版本的代码.如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决?总不能改包名吧,看了一下 dubbo-samples/golang/的代码 发现了有个 go.mod文件,百度一下 g

  • java常用工具类之Excel操作类及依赖包下载

    依赖包下载:http://xiazai.jb51.net/201407/tools/java-excel-dependency(jb51.net).rar Excel工具类ExcelUtil.java源码: package com.itjh.javaUtil; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStr

  • IDEA中Maven依赖包下载不了的问题解决方案汇总

    这个依赖包下载不了的问题真的是很烦,之前一直把下载不上的依赖剪切再粘贴到pom.xml文件中,保存它就自动下载了,但是今天怎么剪切粘贴都没用,所以就花了点时间在网上各种搜解决方案,试了一些之后终于从根本上解决了问题,所以写个博客把解决这个问题的方案汇总一下! 1. 先是对图上的两个位置一番狂点进行刷新,然并卵... 于是又按照博客上的指示去寻找 Settings -> Build,Execution,Deployment -> Build Tools -> Maven -> Ign

  • idea重新下载已删除的maven依赖包操作

    由于依赖包更新,需要重新引入,但是删掉旧包之后重新构建却无法自动下载新包,即使是重启idea也不会自动下载. 其实重新下载的方法很简单,右键项目->maven->Reimport即可. 如下图: 补充:idea中maven的使用问题(配置,命令,idea中重新下载包) idea中自带的maven的路径:D:\Program Files\JetBrains\IntelliJ IDEA 2019.2.2\plugins\maven\lib\maven3 1.配置环境变量 变量名:MAVEN_HOM

  • 解决IntelliJ IDEA maven库下载依赖包速度慢的问题

    在pom.xml中添加maven 依赖包时,我就发现不管是否用了翻墙,下载速度都好慢,就1M的东西能下半天,很是苦恼,于是到网上搜资料,然后让我查到了.说是使用阿里的maven镜像就可以了.我于是亲自试了下,速度快的飞起!!! 右键项目选中maven选项,然后选择"open settings.xml"或者 "create settings.xml",然后把如下代码粘贴进去就可以了.重启IDE,感受速度飞起来的感觉吧!!! <?xml version="

  • Go外部依赖包从vendor,$GOPATH和$GOPATH/pkg/mod查找顺序

    vendor vendor概念最早是由Keith提出,用来存放依赖包.在版本1.5出现.例如gb项目提供了一个名为gsftp的示例项目,它有一个gsftp程序,在标准库之外有三个依赖项.golang.org/x/crypto/ssh, golang.org/x/crypto/ssh/agent和github.com/pkg/sftp. 按vendor概念调整的目录结构如下: $GOPATH | src/ | | github.com/constabulary/example-gsftp/ | |

  • Web前端开发工具——bower依赖包管理工具

    Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系. 包管理工具一般有以下的功能: a)注册机制:每个包需要确定一个唯一的 ID 使得搜索和下载的时候能够正确匹配,所以包管理工具需要维护注册信息,可以依赖其他平台. b)文件存储:确定文件存放的位置,下载的时候可以找到,当然这个地址在网络上是可访问的. c)上传下载:这是工具的主要功能,能提高包使用的便利性.比如想用 jqu

  • CI框架使用composer安装的依赖包步骤与方法分析

    本文实例讲述了CI框架使用composer安装的依赖包的相关操作步骤与方法.分享给大家供大家参考,具体如下: 本文针对 Linux 系统,windows 第一步 根据 composer 官网进行安装 后面的步骤相同 step 1  全局安装 composer $ curl -sS https://getcomposer.org/installer | php $ mv composer.phar /usr/local/bin/composer step 2  创建composer.json 到你

  • Python安装依赖(包)模块方法详解

    Python模块,简单说就是一个.py文件,其中可以包含我们需要的任意Python代码.迄今为止,我们所编写的所有程序都包含在单独的.py文件中,因此,它们既是程序,同时也是模块.关键的区别在于,程序的设计目标是运行,而模块的设计目标是由其他程序导入并使用. 不是所有程序都有相关联的.py文件-比如说,sys模块就内置于Python中,还有些模块是使用其他语言(最常见的是C语言)实现的.不过,Python的大多数库文件都是使用Python实现的,因此,比如说,我们使用了语句import coll

随机推荐