返回顶部
首页 > 资讯 > 后端开发 > GO >goget和goinstall对比介绍
  • 684
分享到

goget和goinstall对比介绍

go get go installgo install和go get对比 2023-05-16 15:05:48 684人浏览 八月长安
摘要

目录一、问题背景二、原因探究(一)命令定义和区别(二)Go get 是否包含了 go install(三)为什么要用 go install一、问题背景 安装Go库db2struct时

一、问题背景

安装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/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/src$GOPATH/bin
go install编译并安装 Go 代码包无需下载自身代码,$GOPATH/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对比内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: goget和goinstall对比介绍

本文链接: https://lsjlt.com/news/210142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • goget和goinstall对比介绍
    目录一、问题背景二、原因探究(一)命令定义和区别(二)go get 是否包含了 go install(三)为什么要用 go install一、问题背景 安装Go库db2struct时...
    99+
    2023-05-16
    go get go install go install和go get对比
  • OLAP、OLTP的介绍和比较
    转: https://www.cnblogs.com/hhandbibi/p/7118740.html OLTP与OLAP的介绍     数据处理大致可以分成两大...
    99+
    2024-04-02
  • B树和B+树的介绍和对比,以及MySQL为何选择B+树
    在计算机科学中,B树和B+树是常用的数据结构,用于在大规模数据集上进行高效的插入、删除和查找操作。它们在数据库管理系统、文件系统等许多实际应用中发挥着重要作用。本文将深入介绍B树和B+树的结构特点、实际应用方面以及它们的优缺点,并最后进行二...
    99+
    2023-10-04
    b树 数据结构
  • Python 类和对象详细介绍
    目录对象 = 属性 + 方法self是什么公有和私有继承调用未绑定的父类方法使用super函数多重继承组合构造和析构_ _init_ _(self[, …])构造方法_...
    99+
    2024-04-02
  • win 11 21h2 和22h2哪个版本更好一些? win1121h2和22h2对比区别介绍
    部分用户在更新系统的时候,发现win11有21h2和22h2等版本,那么win1121h2和22h2哪个好呢?win11 22h2相较于21h2来说,各方面性能都有了提升,增加了不少新的功能,比如实时字幕无障碍功能、语音...
    99+
    2023-05-30
    win 11 21h2 22h2
  • shell的比较运算介绍
    shell字符串比较、判断是否为数字 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 整数比较 -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$...
    99+
    2022-06-04
    shell
  • Flask  request 对象介绍
    目录1、request请求对象1.1request请求对象的使用前言: 一个完整的 HTTP 请求,包括客户端向服务端发送的 Request 请求和服务器端发送的 Response ...
    99+
    2024-04-02
  • Oracle对象之表和索引的介绍
    对于传统的关系数据库管理系统(RDBMS),比如Oracle、MySQL等,都是在数据库中存储和检索数据,在Oracle中,用schema来表示逻辑数据结构或模式对象的集合,模式对象是用户创建的,用来直接引...
    99+
    2024-04-02
  • Python类和对象基础入门介绍
    目录视频Python 类和对象创建和使用类根据类创建实例视频 观看视频 Python 类和对象 面向对象编程是编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。 编写类时,...
    99+
    2024-04-02
  • pythonscrapy框架中Request对象和Response对象的介绍
    目录一、Request对象二、发送POST请求三、Response对象一、Request对象 Request对象主要是用来请求数据,爬取一页的数据重新发送一个请求的时候调用,其源码类...
    99+
    2024-04-02
  • Python 面向对象介绍
    一、类的实例化:调用类产生对象的过程称为类的实例化,实例化的结果是一个对象,或称为一个实例 1 class People: 2 def __init__(self,name,age,sex): 3 self.na...
    99+
    2023-01-30
    面向对象 Python
  • 介绍java中Pair(配对)
    目录介绍java中Pair核心java配对实现Pair类AbstractMap.SimpleEntry 和 AbstractMap.SimpleImmutableEntryApach...
    99+
    2023-03-19
    java中Pair java配对实现
  • JavaScript内置对象介绍
    目录一、内置对象二、Math对象1、Math对象的使用2、生成指定范围的随机数三、日期对象1、Date()方法的使用2、日期对象的使用3、获取时间戳四、数组对象1、数组对象的创建2、...
    99+
    2024-04-02
  • Golang中常用的工具和框架介绍与比较
    Golang是一种快速、高效、可靠的编程语言,越来越受到开发者的青睐。在Golang的开发过程中,我们通常会使用一些工具和框架来提高效率和简化开发。本文将介绍一些Golang中常用的工...
    99+
    2024-02-28
    工具 框架 golang go语言
  • MySQL计算百分比方法介绍
    根据相应条件抽出相应count数(myCount)抽出总count数(totalCount)计算百分比:myCount / totalCount * 100四舍五入:使用ROUND函数ROUND(numbe...
    99+
    2024-04-02
  • 关于java中类和对象的详细介绍
    类和对象对象我们知道,代表现实世界中可以明确标识的一个实体(万物皆对象),每个对象都有自己独特的标识、状态和行为。类是具有相似特征和行为的事物的统称。使用一个通用类来定义同一类型的对象。 类是一个模板 、蓝本或者说是合约 , 用来定义对象的...
    99+
    2015-06-07
    java入门 java 对象
  • Java类和对象的初始化顺序介绍
    本篇内容介绍了“Java类和对象的初始化顺序介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!类装载步骤在Java中,类装载器把一个类装入J...
    99+
    2023-06-17
  • PHP5.0对象模型的属性和方法介绍
    本篇内容主要讲解“PHP5.0对象模型的属性和方法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP5.0对象模型的属性和方法介绍”吧!今天我们向大家介绍的是关于PHP5.0对象模型的属性...
    99+
    2023-06-17
  • Vue插槽slot详细介绍(对比版本变化,避免踩坑)
    目录插槽是什么?怎么使用插槽?基本用法后备(默认)内容具名插槽作用域插槽插槽版本变化总结Vue中的插槽(slot)在项目中用的也是比较多的,今天就来介绍一下插槽的基本使用以及Vue版...
    99+
    2024-04-02
  • JavaScript对象不变性介绍
    目录1. 基本概念2. Object.freeze()3. Object.seal()4. const关键字?5. 总结1. 基本概念 对象不变性在任何编程语言中都是一个重要的概念。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作