go get 和 go install 对比
(一)命令定义和区别
go install
和 go get
都是 Go 语言的工具命令,但它们之间有一些区别。
go get
:用于从远程代码存储库(如 GitHub)中下载或更新 Go 代码包。它会下载代码包并将其存储在$GOPATH/src
目录下对应的位置,并编译代码包中的程序和库。如果目标包之前已经被下载过了,那么go get
会尝试更新到最新版本,并重新编译程序和库文件。在更新完代码包后,go get
还会自动把下载的代码包的可执行文件复制到$GOPATH/bin
目录下,以方便直接使用该可执行文件。go install
:用于编译并安装 Go 代码包,并将其生成的可执行程序或库文件存储到$GOPATH/bin
或者$GOPATH/pkg
目录下。如果你在项目目录下执行go install
,它将会编译并安装当前项目的代码,生成可执行文件并将其保存到$GOPATH/bin
目录下(如果项目是一个库,则生成的是.a
文件,并将其存储到$GOPATH/pkg
目录下)。
因此,go get
用于下载和更新代码包,并产生对应的可执行程序,而 go install
用于将一个 Go 代码包转化为可执行程序或库文件,并安装到系统路径以供直接使用。
使用表格形式对 go get
和 go install
进行比较:
二)go get
是否包含了 go install
可以认为 go get
命令包含了 go install
命令的功能,但它们之间还是存在一些细微差别。
go get
命令用于从远程代码库中下载或更新 Go 代码包,并自动编译生成相应的可执行程序,同时还将其安装到 $GOPATH/bin
目录下,以便简化程序的运行。go get
命令不需要指定包的路径,它会使用 Go 语言规范中约定的包导入路径来获取包信息,并自动处理包的依赖关系以方便编译。
相比之下,go install
命令则更为灵活,它可以编译并安装当前项目的代码,生成可执行文件或库,并将其保存在 $GOPATH/bin
或 $GOPATH/pkg
目录下。同时,go install
命令还可以通过指定 -ldflags
参数来修改二进制文件的链接标志,从而将一些自定义的元信息加入到二进制文件中,使得可以在运行时通过代码读取这些信息。
在 Go 1.16 版本之后,go get
命令已经默认使用了 Go 模块管理工具。而 go install
命令则始终需要先进入到处于 Go 模块管理的路径下,然后才能使用该命令编译并安装相关代码包。
综上所述,可以认为 go get
命令包含了 go install
命令的部分功能,但是在一些特殊情况下,还是需要使用 go install
命令来进行更灵活的编译和安装操作。
(三)为什么要用 go install
在使用 go get
命令下载并安装代码包时,有些情况下生成的可执行文件可能无法生效,这通常是因为 Go 语言版本不兼容或编译环境不同导致的。而使用 go install
命令则可以避免这些问题,下面列举了几种常见情况:
- 版本不兼容:如果
go get
命令下载的代码包和当前使用的 Go 语言版本不兼容,那么go get
命令可能会产生编译错误或生成无法运行的可执行文件。对于这种情况,使用go install
命令可以保证使用的是当前系统上与 Go 语言版本兼容的编译器。 - 编译环境不同:在使用
go get
命令下载代码包时,有时它们的编译环境与当前环境不同,可能会导致可执行文件无法正常工作。而在使用go install
命令时,该命令会在当前环境下重新编译源代码并生成可执行文件,从而能够更加稳定地运行代码。 - 依赖关系复杂:在使用
go get
命令下载大型的代码包时,它可能会自动下载和安装大量依赖项。这样可能会导致依赖关系变得复杂而难以管理,有时可能会在下载或编译依赖项时产生错误或警告。而go install
命令会直接从当前路径下对应依赖项中寻找依赖项,因此可以避免这种情况下带来的复杂性和错误。
综上所述,尽管 go get
命令十分方便快捷,但在遇到一些特殊情况时,仍然需要使用 go install
命令以获得更加稳定的编译和安装效果。
可以使用如下表格来对比 go get
和 go install
的编译区别:
go get 和 go install 对比的更多相关文章
- Linux 系统裁剪笔记1
1.什么裁剪? 本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好 ...
- 通过grub-install命令把grub安装到u盘-总结
通过grub-install命令把grub安装到u盘 ①准备一个u盘,容量不限,能有1MB都足够了. ②把u盘格式化(我把u盘格式化成FAT.fat32格式了,最后证明也是成功的).③开启linux系 ...
- linux内核升级(ubuntu12.04从3.13.0升级到3.4.0 )
花了一天的时间,终于把ubuntu12.04 的linux内核版本从3.13.0升级到3.4.0 升级后,系统更加稳定.具体步骤:# wget http://www.kernel.org/pub/li ...
- sudo apt-get install 、 pip install和conda install的对比
sudo apt-get install: apt-get可以用来安装软件.更新源,也可以用来更新自Ubuntu的典型依赖包. (sudo apt-get remove --purge 软件名称 su ...
- 几款主流 NoSql 数据库的对比
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...
- 关于 redis、memcache、mongoDB 的对比
从以下几个维度,对 redis.memcache.mongoDB 做了对比. 1.性能 都比较高,性能对我们来说应该都不是瓶颈. 总体来讲,TPS 方面 redis 和 memcache 差不多,要大 ...
- Xcode插件优缺点对比(推荐20款插件)
本文大致整理了自己用过的一些插件的使用感想(就是好不好用). 在那之前先简单贴两条插件须知,知道的可以忽略. 1.Alcatraz 类似于管理第三方库的cocoapods,管理插件也有个Alcatra ...
- redis、memcache、mongoDB 做了对比
from: http://yang.u85.us/memcache_redis_mongodb.pdf 从以下几个维度,对redis.memcache.mongoDB 做了对比. 1.性能 都比较 ...
- Linux下对比两个文件夹的方法
最近拿到一份源代码,要命的是这份源代码是浅克隆模式的git包,所以无法完整显示里面的修改的内容. 今天花了一点点时间,找了一个在Linux对比两个文件夹的方法. 其实方法很简单,用meld 去对比两个 ...
- redis、memcached、mongoDB 对比与安装
一.redis.memcached.mongoDB 对比 Memcached 和 Redis都是内存型数据库,数据保存在内存中,通过tcp直接存取,速度快,并发高.Mongodb是文档型的非关系型数据 ...
随机推荐
- SQL 求中位值
题目A median is defined as a number separating the higher half of a data set from the lower half. Quer ...
- Heart Rate Variability - HRV
一次心跳波形 心率变异性 通常希望HRV 越高越好 HRV 公式: 需要指出的是,心率变异性会有多种计算公式. HRV数值相对越小=当天压力越大/身体越疲劳:HRV数值相对越大=当天压力越小/身体状态 ...
- JAVA开发常见问题整理(持续更新)
maven项目出现:"致命错误: 在类路径或引导类路径中找不到程序包 java.lang"的解决方法 原文地址:https://www.cnblogs.com/xuehuashan ...
- PRCV 2023:语言模型与视觉生态如何协同?合合信息瞄准“多模态”技术
PRCV 2023:语言模型与视觉生态如何协同?合合信息瞄准"多模态"技术 近期,2023年中国模式识别与计算机视觉大会(PRCV)在厦门成功举行.大会由中国计算机学会(CCF). ...
- 这10种分布式ID,太绝了!
前言 分布式ID,在我们日常的开发中,其实使用的挺多的. 有很多业务场景在用,比如: 分布式链路系统的trace_id 单表中的主键 Redis中分布式锁的key 分库分表后表的id 今天跟大家一起聊 ...
- OSG开发笔记(三十):OSG加载动力学仿真K模型文件以及测试Demo
前言 Osg需要打开模型文件,但是遇到显示动力学仿真的K模型文件,.k文件是一种描述材料属性的文件,比如密度.弹性模量等,该模型文件不是常规中间开放格式,无法直接支持,需要自定义解析并且重建三维模 ...
- C# + WPF 音频播放器 界面优雅,体验良好
前言 本文介绍一款使用 C# 与 WPF 开发的音频播放器,其界面简洁大方,操作体验流畅.该播放器支持多种音频格式(如 MP4.WMA.OGG.FLAC 等),并具备标记.实时歌词显示等功能. 另外, ...
- 【赵渝强老师】在MongoDB中使用MapReduce方式计算聚合
MapReduce 能够计算非常复杂的聚合逻辑,非常灵活,但是,MapReduce非常慢,不应该用于实时的数据分析中.MapReduce能够在多台Server上并行执行,每台Server只负责完成一部 ...
- 【VMware VCF】使用 SoS 实用程序检查 VCF 环境的运行状态以及收集组件的日志信息。
VMware Cloud Foundation 解决方案中有一个叫 Supportability and Serviceability(SoS)可支持性和可维护性的实用程序,可能你在初始构建 VCF ...
- Oracle、MySQL等数据库故障处理优质文章分享 | 10月汇总
墨天轮社区于9月起持续举办[聊聊故障处理那些事儿]DBA专题征文活动,每月进行评优发奖,鼓励大家记录工作中遇到的数据库故障处理过程,不仅用于自我复盘与分析,同时也能帮助其他的同仁们避坑. 上月为大家梳 ...