我的编程空间,编程开发者的网络收藏夹
学习永远不晚

goget和goinstall对比介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

goget和goinstall对比介绍

一、问题背景

安装Go库db2struct时,使用go get命令执行

go get ``github.com/Shelnutt2/db2struct/cmd/db2struct

执行db2struct -h报错:

zsh: command not found: db2struct

改为go install命令执行

go install ``github.com/Shelnutt2/db2struct/cmd/db2struct

后成功执行db2struct -h,同时ls $GOPATH/bin也看到了可执行文件db2struct

二、原因探究

(一)命令定义和区别

go installgo get 都是 Go 语言的工具命令,但它们之间有一些区别。

  • go get:用于从远程代码存储库(如 GitHub)中下载或更新 Go 代码包。它会下载代码包并将其存储在 $GOPATH/class="lazy" data-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 getgo install 进行比较:

命令功能下载位置生成文件位置
go get从远程代码库中下载或更新 Go 代码包$GOPATH/class="lazy" data-src$GOPATH/bin
go install编译并安装 Go 代码包无需下载自身代码,$GOPATH/class="lazy" data-src 用于依赖包的查找GOPATH/bin或GOPATH/bin 或 GOPATH/bin或GOPATH/pkg

(二)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 getgo install 的编译区别:

命令功能编译效果应用场景
go get下载或更新 Go 代码包并生成可执行文件可能由于版本或编译环境的不同,生成的可执行文件无法运行或出现其他问题需要快速下载和安装指定版本的 Go 代码包,如果生成的可执行文件无法运行,则需要使用 go install 命令重新编译
go install编译并安装 Go 代码并生成可执行文件或库在当前环境下重新编译源代码并生成可执行文件或库,能够更加稳定地运行代码包需要在当前环境下重新编译 Go 代码并生成二进制文件,需要避免由于版本不兼容、编译环境不同或依赖关系复杂性导致的编译错误和生成的可执行文件无法运行的问题。

到此这篇关于go get 和 go install 对比介绍的文章就介绍到这了,更多相关go get和go install对比内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

goget和goinstall对比介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

goget和goinstall对比介绍

goinstall和goget都是Go语言的工具命令,但它们之间有一些区别。goget:用于从远程代码存储库(如GitHub)中下载或更新Go代码包。goinstall:用于编译并安装Go代码包,本文goget和goinstall对比介绍的非常详细,需要的朋友可以参考一下
2023-05-16

win 11 21h2 和22h2哪个版本更好一些? win1121h2和22h2对比区别介绍

部分用户在更新系统的时候,发现win11有21h2和22h2等版本,那么win1121h2和22h2哪个好呢?win11 22h2相较于21h2来说,各方面性能都有了提升,增加了不少新的功能,比如实时字幕无障碍js功能、语音访问工具等等,与
2023-05-30

Golang中常用的工具和框架介绍与比较

Golang是一种快速、高效、可靠的编程语言,越来越受到开发者的青睐。在Golang的开发过程中,我们通常会使用一些工具和框架来提高效率和简化开发。本文将介绍一些Golang中常用的工具和框架,并进行比较分析,同时配以具体的代码示例来帮助读
Golang中常用的工具和框架介绍与比较
2024-02-28

关于java中类和对象的详细介绍

类和对象对象我们知道,代表现实世界中可以明确标识的一个实体(万物皆对象),每个对象都有自己独特的标识、状态和行为。类是具有相似特征和行为的事物的统称。使用一个通用类来定义同一类型的对象。 类是一个模板 、蓝本或者说是合约 , 用来定义对象的数据域是什么以及方法
关于java中类和对象的详细介绍
2015-06-07

PHP5.0对象模型的属性和方法介绍

本篇内容主要讲解“PHP5.0对象模型的属性和方法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP5.0对象模型的属性和方法介绍”吧!今天我们向大家介绍的是关于PHP5.0对象模型的属性
2023-06-17

Java类和对象的初始化顺序介绍

本篇内容介绍了“Java类和对象的初始化顺序介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!类装载步骤在Java中,类装载器把一个类装入J
2023-06-17

Python中可变和不可变对象的详细介绍

这篇文章主要介绍“Python中可变和不可变对象的详细介绍”,在日常操作中,相信很多人在Python中可变和不可变对象的详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中可变和不可变对象的详
2023-06-20

Shell脚本对比两个文本文件找出不同行的方法介绍

这篇文章主要介绍“Shell脚本对比两个文本文件找出不同行的方法介绍”,在日常操作中,相信很多人在Shell脚本对比两个文本文件找出不同行的方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Shell脚本
2023-06-09

Java中对象的深复制和浅复制的详细介绍

这篇文章主要介绍“Java中对象的深复制和浅复制的详细介绍”,在日常操作中,相信很多人在Java中对象的深复制和浅复制的详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中对象的深复制和浅复制的详
2023-06-17

.Net 6简介并和之前版本写法的对比是怎样的

.Net 6简介并和之前版本写法的对比是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。介绍vs2022正式版已经推出了,估计很多人已经下载并开始创建.Net 6 开始
2023-06-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录