Maison  >  Article  >  développement back-end  >  A quoi sert la commande go get ?

A quoi sert la commande go get ?

青灯夜游
青灯夜游original
2023-01-29 13:49:014572parcourir

La commande "go get" peut extraire ou mettre à jour à distance les packages de code et leurs packages dépendants à l'aide d'outils de gestion de code, et terminer automatiquement la compilation et l'installation. La commande "go get" peut obtenir dynamiquement le package de code distant Avant d'utiliser la commande "go get", vous devez installer un outil de gestion de code qui correspond au package distant, tel que Git, SVN, HG, etc., et un. le nom du package doit être fourni dans le paramètre.

A quoi sert la commande go get ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.

La commande go get peut extraire ou mettre à jour à distance les packages de code et leurs packages dépendants à l'aide d'outils de gestion de code, et terminer automatiquement la compilation et l'installation. L’ensemble du processus est aussi simple que d’installer une application.

Cette commande peut obtenir dynamiquement des packages de code distant. Actuellement, BitBucket, GitHub, Google Code et Launchpad sont pris en charge. Avant d'utiliser la commande go get, vous devez installer un outil de gestion de code qui correspond au package distant, tel que Git, SVN, HG, etc., et fournir un nom de package dans le paramètre.

Cette commande est en fait divisée en deux étapes en interne : la première étape consiste à télécharger le package de code source et la deuxième étape consiste à exécuter go install.

commande go get - obtenez le code, compilez et installez en un seul clic

hc@ubt:~$ go get github.com/hyper-carrot/go_lib/logging

La commande go get peut télécharger ou mettre à jour le package de code spécifié et son contenu à partir d'Internet selon les exigences et conditions réelles Packages de dépendances, compilez-les et installez-les. Dans l'exemple ci-dessus, nous avons téléchargé un projet (ou un package de code) depuis le célèbre site d'hébergement de code Github et l'avons installé dans le premier espace de travail inclus dans la variable d'environnement GOPATH. Dans le même temps, nous savons également que le chemin d'importation de ce package de code est github.com/hyper-carrot/go_lib/logging. go get可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。在上面这个示例中,我们从著名的代码托管站点Github上下载了一个项目(或称代码包),并安装到了环境变量GOPATH中包含的第一个工作区中。与此同时,我们也知道了这个代码包的导入路径就是github.com/hyper-carrot/go_lib/logging。

一般情况下,为了分离自己与第三方的代码,我们会设置两个或更多的工作区。我们现在有一个目录路径为/home/hc/golang/lib的工作区,并且它是环境变量GOPATH值中的第一个目录路径。注意,环境变量GOPATH中包含的路径不能与环境变量GOROOT的值重复。好了,如果我们使用go get命令下载和安装代码包,那么这些代码包都会被安装在上面这个工作区中。我们暂且把这个工作区叫做Lib工作区。在我们运行go get github.com/hyper-carrot/go_lib/logging之后,这个代码包就应该会被保存在Lib工作的src目录下,并且已经被安装妥当,如下所示:

/home/hc/golang/lib:
    bin/
    pkg/
        linux_386/
            github.com/
                hyper-carrot/
                    go_lib/
                        logging.a  
    src/
        github.com/
            hyper-carrot/
                go_lib/
                    logging/
    ...

另一方面,如果我们想把一个项目上传到Github网站(或其他代码托管网站)上并被其他人使用的话,那么我们就应该把这个项目当做一个代码包来看待。其实我们在之前已经提到过原因,go get命令会将项目下的所有子目录和源码文件存放到第一个工作区的src目录下,而src目录下的所有子目录都会是某个代码包导入路径的一部分或者全部。也就是说,我们应该直接在项目目录下存放子代码包和源码文件,并且直接存放在项目目录下的源码文件所声明的包名应该与该项目名相同(除非它是命令源码文件)。这样做可以让其他人使用go get命令从Github站点上下载你的项目之后直接就能使用它。

实际上,像goc2p项目这样直接以项目根目录的路径作为工作区路径的做法是不被推荐的。之所以这样做主要是想让读者更容易的理解Go语言的工程结构和工作区概念,也可以让读者看到另一种项目结构。当然,如果你的项目使用了gb这样的工具那就是另外一回事了。这样的项目的根目录就应该被视为一个工作区(但是你不必把它加入到GOPATH环境变量中)。它应该由git clone下载到Go语言工作区之外的某处,而不是使用go get命令。

远程导入路径分析

实际上,go get命令所做的动作也被叫做代码包远程导入,而传递给该命令的作为代码包导入路径的那个参数又被叫做代码包远程导入路径。

go get命令不仅可以从像Github这样著名的代码托管站点上下载代码包,还可以从任何命令支持的代码版本控制系统(英文为Version Control System,简称为VCS)检出代码包。任何代码托管站点都是通过某个或某些代码版本控制系统来提供代码上传下载服务的。所以,更严格地讲,go get命令所做的是从代码版本控制系统的远程仓库中检出/更新代码包并对其进行编译和安装。

该命令所支持的VCS的信息如下表:

表0-2 go getGénéralement, afin de séparer notre propre code de celui de tiers, nous mettrons en place deux ou plusieurs espaces de travail. Nous avons maintenant un espace de travail avec le chemin du répertoire /home/hc/golang/lib, et c'est le premier chemin du répertoire dans la valeur GOPATH de la variable d'environnement. Notez que le chemin contenu dans la variable d'environnement GOPATH ne peut pas être le même que la valeur de la variable d'environnement GOROOT. Eh bien, si nous utilisons la commande go get pour télécharger et installer des packages de code, alors ces packages de code seront installés dans l'espace de travail ci-dessus. Appelons temporairement cet espace de travail l'espace de travail Lib. Après avoir exécuté go get github.com/hyper-carrot/go_lib/logging, le package de code doit être enregistré dans le répertoire src du travail Lib et a été installé correctement, comme indiqué ci-dessous :

package analyzer // import "hypermind.cn/talon/analyzer"
🎜D'un autre côté, si nous voulons télécharger un projet sur le site Web Github (ou un autre site Web d'hébergement de code) et être utilisé par d'autres, nous devons alors traiter le projet comme un package de code. En fait, nous avons déjà mentionné la raison. La commande go get stockera tous les sous-répertoires et fichiers de code source du projet dans le répertoire src du premier espace de travail, et tous les sous-répertoires du répertoire src seront stocké dans le répertoire src du premier espace de travail. Le répertoire fera partie ou la totalité du chemin d'importation d'un package de code. En d'autres termes, nous devons stocker les packages de sous-code et les fichiers de code source directement dans le répertoire du projet, et le nom du package déclaré par le fichier de code source directement stocké dans le répertoire du projet doit être le même que le nom du projet (sauf s'il s'agit d'une source de commande). fichier de code). Cela permet à d'autres personnes d'utiliser votre projet directement après l'avoir téléchargé depuis Github à l'aide de la commande go get. 🎜🎜En fait, il n'est pas recommandé d'utiliser directement le chemin du répertoire racine du projet comme chemin de l'espace de travail comme le projet goc2p. La principale raison de cela est de permettre aux lecteurs de comprendre plus facilement la structure du projet et les concepts d'espace de travail du langage Go, et également de permettre aux lecteurs de voir une autre structure de projet. Bien sûr, si votre projet utilise des outils comme gb, c'est une autre affaire. Le répertoire racine d'un tel projet doit être considéré comme un espace de travail (mais vous n'avez pas besoin de l'ajouter à la variable d'environnement GOPATH). Il doit être téléchargé quelque part en dehors de l'espace de travail du langage Go par git clone, plutôt que d'utiliser la commande go get. 🎜🎜🎜Analyse du chemin d'importation à distance🎜🎜🎜En fait, l'action effectuée par la commande go get est également appelée importation à distance du package de code, et le paramètre passé à la commande en tant que chemin d'importation du package de code est C’est ce qu’on appelle le chemin d’importation à distance du package de code. 🎜🎜La commande go get peut non seulement télécharger des packages de code à partir de sites d'hébergement de code célèbres comme Github, mais également à partir de n'importe quel système de contrôle de version de code (système de contrôle de version anglais, appelé VCS) pris en charge par la commande. . Consultez le package de codes. Tout site d'hébergement de code fournit des services de téléchargement et de téléchargement de code via un ou plusieurs systèmes de contrôle de version de code. Donc, plus strictement parlant, la commande go get consiste à extraire/mettre à jour le package de code à partir du référentiel distant du système de contrôle de version de code, puis à le compiler et à l'installer. 🎜🎜Les informations VCS prises en charge par cette commande sont les suivantes : 🎜🎜Tableau 0-2 VCS ​​​​supportées par la commande go get🎜🎜
Nom Commande principale Description
Mercurial hg Mercurial est un système de contrôle de version distribué léger implémenté en langage Python, facile à apprendre et à utiliser, et hautement évolutif.
Git git Git était à l'origine un logiciel de contrôle de version distribué open source développé par Linux Torvalds pour aider à gérer le développement du noyau Linux. Mais il est désormais largement utilisé. Il est utilisé pour une gestion de versions efficace et rapide de projets de toutes tailles.
Subversion svn Subversion est un système de contrôle de version et le premier système à intégrer le concept et les fonctionnalités des branches dans le modèle de contrôle de version. Mais comparé à Git et Mercurial, ce n'est qu'un membre du système de contrôle de version traditionnel.
Bazaar bzr Bazaar est un système de contrôle de version distribué open source. Mais en comparaison, peu de projets l’utilisent comme VCS.

La commande go get doit connaître le système de contrôle de version et l'URL de l'entrepôt distant correspondant au chemin d'importation distant du package de code avant d'extraire le package de code. go get命令在检出代码包之前必须要知道代码包远程导入路径所对应的版本控制系统和远程仓库的URL。

如果该代码包在本地工作区中已经存在,则会直接通过分析其路径来确定这几项信息。go get命令支持的几个版本控制系统都有一个共同点,那就是会在检出的项目目录中存放一个元数据目录,名称为“.”前缀加其主命令名。例如,Git会在检出的项目目录中加入一个名为“.git”的子目录。所以,这样就很容易判定代码包所用的版本控制系统。另外,又由于代码包已经存在,我们只需通过代码版本控制系统的更新命令来更新代码包,因此也就不需要知道其远程仓库的URL了。对于已存在于本地工作区的代码包,除非要求强行更新代码包,否则go get命令不会进行重复下载。如果想要强行更新代码包,可以在执行go get命令时加入-u标记。这一标记会稍后介绍。

如果本地工作区中不存在该代码包,那么就只能通过对代码包远程导入路径进行分析来获取相关信息了。首先,go get命令会对代码包远程导入路径进行静态分析。为了使分析过程更加方便快捷,go get

Si le package de code existe déjà dans l'espace de travail local, ces informations seront déterminées directement en analysant son chemin. Plusieurs systèmes de contrôle de version pris en charge par la commande go get ont une chose en commun : un répertoire de métadonnées sera stocké dans le répertoire du projet extrait, avec un nom préfixé par "." nom de la commande principale. Par exemple, Git ajoutera un sous-répertoire nommé « .git » au répertoire du projet extrait. Par conséquent, il est facile de déterminer le système de contrôle de version utilisé par le package de code. De plus, comme le package de code existe déjà, il suffit de mettre à jour le package de code via la commande update du système de contrôle de version de code, il n'est donc pas nécessaire de connaître l'URL de son entrepôt distant. Pour les packages de code qui existent déjà dans l'espace de travail local, la commande go get ne les téléchargera pas de manière répétée, sauf si elle est nécessaire pour forcer la mise à jour du package de code. Si vous souhaitez forcer la mise à jour du package de code, vous pouvez ajouter la balise -u lors de l'exécution de la commande go get. Ce balisage sera introduit ultérieurement.

Si le package de code n'existe pas dans l'espace de travail local, les informations pertinentes ne peuvent être obtenues qu'en analysant le chemin d'importation à distance du package de code. Tout d'abord, la commande go get effectue une analyse statique sur le chemin d'importation distant du package de code. Afin de rendre le processus d'analyse plus pratique et plus rapide, le programme de commande go get a prédéfini les informations de plusieurs sites Web d'hébergement de code célèbres. Tableau ci-dessous :

Les informations sur la garde de code du site de garde de code prédéfini 0-3 bitbucket.orgbitbucket.org/user/project/sub/ répertoireGitHubgithub.comGitgithub.com/user /projectcode.google.com Git, Mercurial, Subversioncode.google.com/p/projectcode.google.com/p/project.subrepositoryLaunchpadlaunchpad.netBazaarlaunchpad.net/projectlaunchpad.net/project/series/sub/directory
Git, Mercurial bitbucket.org/user/project
github.com/user/project/sub/directory Google Code Project Hosting
code google.com/p/project/sub/directorycode.google.com. /p/project.subrepository/sub/directory
launchpad.net/project/serieslaunchpad.net/
user/project/branch
launchpad.net/
user/project/ branch/sub/directory
IBM DevOps Services hub.jazz.net Git hub.jazz.net /git/user/project
hub.jazz.net/git/user/project/sub/ répertoire


一般情况下,代码包远程导入路径中的第一个元素就是代码托管网站的主域名。在静态分析的时候,go get命令会将代码包远程导入路径与预置的代码托管站点的主域名进行匹配。如果匹配成功,则在对代码包远程导入路径的初步检查后返回正常的返回值或错误信息。如果匹配不成功,则会再对代码包远程导入路径进行动态分析。至于动态分析的过程,我就不在这里详细展开了。

如果对代码包远程导入路径的静态分析或/和动态分析成功并获取到对应的版本控制系统和远程仓库URL,那么go get命令就会进行代码包检出或更新的操作。随后,go get命令会在必要时以同样的方式检出或更新这个代码包的所有依赖包。

自定义代码包远程导入路径

如果你想把你编写的(被托管在不同的代码托管网站上的)代码包的远程导入路径统一起来,或者不希望让你的代码包中夹杂某个代码托管网站的域名,那么你可以选择自定义你的代码包远程导入路径。这种自定义的实现手段叫做“导入注释”。导入注释的写法示例如下:

package analyzer // import "hypermind.cn/talon/analyzer"

代码包analyzer实际上属于我的一个网络爬虫项目。这个项目的代码被托管在了Github网站上。它的网址是:https://github.com/hyper-carrot/talon。如果用标准的导入路径来下载analyzer代码包的话,命令应该这样写go get github.com/hyper-carrot/talon/analyzer。不过,如果我们像上面的示例那样在该代码包中的一个源码文件中加入导入注释的话,这样下载它就行不通了。我们来看一看这个导入注释。

导入注释的写法如同一条代码包导入语句。不同的是,它出现在了单行注释符//的右边,因此Go语言编译器会忽略掉它。另外,它必须出现在源码文件的第一行语句(也就是代码包声明语句)的右边。只有符合上述这两个位置条件的导入注释才是有效的。再来看其中的引号部分。被双引号包裹的应该是一个符合导入路径语法规则的字符串。其中,hypermind.cn是我自己的一个域名。实际上,这也是用来替换掉我想隐去的代码托管网站域名及部分路径(这里是github.com/hyper-carrot)的那部分。在hypermind.cn右边的依次是我的项目的名称以及要下载的那个代码包的相对路径。这些与其标准导入路径中的内容都是一致的。为了清晰起见,我们再来做下对比。

github.com/hyper-carrot/talon/analyzer // 标准的导入路径
hypermind.cn           /talon/analyzer // 导入注释中的导入路径

你想用你自己的域名替换掉标准导入路径中的哪部分由你自己说了算。不过一般情况下,被替换的部分包括代码托管网站的域名以及你在那里的用户ID就可以了。这足以达到我们最开始说的那两个目的。

虽然我们在talon项目中的所有代码包中都加入了类似的导入注释,但是我们依然无法通过go get hypermind.cn/talon/analyzer命令来下载这个代码包。因为域名hypermind.cn所指向的网站并没有加入相应的处理逻辑。具体的实现步骤应该是这样的:

  • 编写一个可处理HTTP请求的程序。这里无所谓用什么编程语言去实现。当然,我推荐你用Go语言去做。

  • 将这个处理程序与hypermind.cn/talon这个路径关联在一起,并总是在作为响应的HTML文档的头中写入下面这行内容:

    <meta name="go-import" content="hypermind.cn/talon git https://github.com/hyper-carrot/talon">

    hypermind.cn/talon/analyzer熟悉HTML的读者都应该知道,这行内容会被视为HTML文档的元数据。它实际上go get命令的文档中要求的写法。它的模式是这样的:

<meta name="go-import" content="import-prefix vcs repo-root">

实际上,content属性中的import-prefix的位置上应该填入我们自定义的远程代码包导入路径的前缀。这个前缀应该与我们的处理程序关联的那个路径相一致。而vcs显然应该代表与版本控制系统有关的标识。还记得表0-2中的主命令列吗?这里的填入内容就应该该列中的某一项。在这里,由于talon项目使用的是Git,所以这里应该填入git。至于repo-root,它应该是与该处理程序关联的路径对应的Github网站的URL。在这里,这个路径是hypermind.cn/talon,那么这个URL就应该是https://github.com/hyper-carrot/talon。后者也是talon项目的实际网址。

好了,在我们做好上述处理程序之后,go get hypermind.cn/talon/analyzer命令的执行结果就会是正确的。analyzer代码包及其依赖包中的代码会被下载到GOPATH环境变量中的第一个工作区目录的src子目录中,然后被编译并安装。

注意,具体的代码包源码存放路径会是/home/hc/golang/lib/src/hypermind.cn/talon/analyzer。也就是说,存放路径(包括代码包源码文件以及相应的归档文件的存放路径)会遵循导入注释中的路径(这里是hypermind.cn/talon/analyzer),而不是原始的导入路径(这里是github.com/hyper-carrot/talon/analyzer)。另外,我们只需在talon项目的每个代码包中的某一个源码文件中加入导入注释,但这些导入注释中的路径都必须是一致的。在这之后,我们就只能使用hypermind.cn/talon/作为talon项目中的代码包的导入路径前缀了。一个反例如下:

hc@ubt:~$ go get github.com/hyper-carrot/talon/analyzer
package github.com/hyper-carrot/talon/analyzer: code in directory /home/hc/golang/lib/src/github.com/hyper-carrot/talon/analyzer expects import "hypermind.cn/talon/analyzer"

与自定义的代码包远程导入路径有关的内容我们就介绍到这里。从中我们也可以看出,Go语言为了让使用者的项目与代码托管网站隔离所作出的努力。只要你有自己的网站和一个不错的域名,这就很容易搞定并且非常值得。这会在你的代码包的使用者面前强化你的品牌,而不是某个代码托管网站的。当然,使你的代码包导入路径整齐划一是最直接的好处。

OK,言归正传,我下面继续关注go get这个命令本身。

命令特有标记

go get命令可以接受所有可用于go build命令和go install命令的标记。这是因为go get命令的内部步骤中完全包含了编译和安装这两个动作。另外,go get命令还有一些特有的标记,如下表所示:

表0-4 go get命令的特有标记说明

标记名称 标记描述
-d 让命令程序只执行下载动作,而不执行安装动作。
-f 仅在使用-u标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里Fork过来的,那么这样做就尤为重要了。
-fix 让命令程序在下载代码包后先执行修正动作,而后再进行编译和安装。
-insecure 允许命令程序使用非安全的scheme(如HTTP)去下载指定的代码包。如果你用的代码仓库(如公司内部的Gitlab)没有HTTPS支持,可以添加此标记。请在确定安全的情况下使用它。
-t 让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包。
-u 让命令利用网络来更新已有代码包及其依赖包。默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包。

为了更好的理解这几个特有标记,我们先清除Lib工作区的src目录和pkg目录中的所有子目录和文件。现在我们使用带有-d标记的go get命令来下载同样的代码包:

hc@ubt:~$ go get -d github.com/hyper-carrot/go_lib/logging

现在,让我们再来看一下Lib工作区的目录结构:

/home/hc/golang/lib:
    bin/
    pkg/
    src/
        github.com/
        hyper-carrot/
        go_lib/
            logging/
    ...

我们可以看到,go get命令只将代码包下载到了Lib工作区的src目录,而没有进行后续的编译和安装动作。这个加入-d标记的结果。

再来看-fix标记。我们知道,绝大多数计算机编程语言在进行升级和演进过程中,不可能保证100%的向后兼容(Backward Compatibility)。在计算机世界中,向后兼容是指在一个程序或者代码库在更新到较新的版本后,用旧的版本程序创建的软件和系统仍能被正常操作或使用,或在旧版本的代码库的基础上编写的程序仍能正常编译运行的能力。Go语言的开发者们已想到了这点,并提供了官方的代码升级工具——fixfix工具可以修复因Go语言规范变更而造成的语法级别的错误。关于fix工具,我们将放在本节的稍后位置予以说明。

假设我们本机安装的Go语言版本是1.5,但我们的程序需要用到一个很早之前用Go语言的0.9版本开发的代码包。那么我们在使用go get命令的时候可以加入-fix标记。这个标记的作用是在检出代码包之后,先对该代码包中不符合Go语言1.5版本的语言规范的语法进行修正,然后再下载它的依赖包,最后再对它们进行编译和安装。

标记-u的意图和执行的动作都比较简单。我们在执行go get命令时加入-u标记就意味着,如果在本地工作区中已存在相关的代码包,那么就是用对应的代码版本控制系统的更新命令更新它,并进行编译和安装。这相当于强行更新指定的代码包及其依赖包。我们来看如下示例:

hc@ubt:~$ go get -v github.com/hyper-carrot/go_lib/logging

因为我们在之前已经检出并安装了这个代码包,所以我们执行上面这条命令后什么也没发生。还记得加入标记-v标记意味着会打印出被构建的代码包的名字吗?现在我们使用标记-u来强行更新代码包:

hc@ubt:~$ go get -v -u  github.com/hyper-carrot/go_lib/logging
github.com/hyper-carrot/go_lib (download)

其中,“(download)”后缀意味着命令从远程仓库检出或更新了该行显示的代码包。如果我们要查看附带-ugo get命令到底做了些什么,还可以加上一个-x标记,以打印出用到的命令。读者可以自己试用一下它。

智能的下载

命令go get还有一个很值得称道的功能。在使用它检出或更新代码包之后,它会寻找与本地已安装Go语言的版本号相对应的标签(tag)或分支(branch)。比如,本机安装Go语言的版本是1.x,那么go get命令会在该代码包的远程仓库中寻找名为“go1”的标签或者分支。如果找到指定的标签或者分支,则将本地代码包的版本切换到此标签或者分支。如果没有找到指定的标签或者分支,则将本地代码包的版本切换到主干的最新版本。

前面我们说在执行go get命令时也可以加入-x标记,这样可以看到go get命令执行过程中所使用的所有命令。不知道读者是否已经自己尝试了。下面我们还是以代码包github.com/hyper-carrot/go_lib为例,并且通过之前示例中的命令的执行此代码包已经被检出到本地。这时我们再次更新这个代码包:

hc@ubt:~$ go get -v -u -x github.com/hyper-carrot/go_lib
github.com/hyper-carrot/go_lib (download)
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git fetch
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git show-refcd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git checkout origin/masterWORK=/tmp/go-build034263530

在上述示例中,go get命令通过git fetch命令将所有远程分支更新到本地,而后有用git show-ref命令列出本地和远程仓库中记录的代码包的所有分支和标签。最后,当确定没有名为“go1”的标签或者分支后,go get命令使用git checkout origin/master命令将代码包的版本切换到主干的最新版本。下面,我们在本地增加一个名为“go1”的标签,看看go get命令的执行过程又会发生什么改变:

hc@ubt:~$ cd ~/golang/lib/src/github.com/hyper-carrot/go_lib
hc@ubt:~/golang/lib/src/github.com/hyper-carrot/go_lib$ git tag go1
hc@ubt:~$ go get -v -u -x github.com/hyper-carrot/go_lib
github.com/hyper-carrot/go_lib (download)
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git fetch
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git show-ref
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git show-ref tags/go1 origin/go1
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git checkout tags/go1
WORK=/tmp/go-build636338114

将这两个示例进行对比,我们会很容易发现它们之间的区别。第二个示例的命令执行过程中使用git show-ref查看所有分支和标签,当发现有匹配的信息又通过git show-ref tags/go1 origin/go1命令进行精确查找,在确认无误后将本地代码包的版本切换到标签“go1”之上。

Cette fonction de la commande go get est très utile. Lorsque notre code dépend directement ou indirectement de certains packages de code développés simultanément pour plusieurs versions du langage Go, la version correcte peut être automatiquement extraite. On peut également dire que la commande go get possède des fonctions intégrées pour la gestion des dépendances multi-versions des packages de code. go get的这一功能是非常有用的。我们的代码在直接或间接依赖某些同时针对多个Go语言版本开发的代码包时,可以自动的检出其正确的版本。也可以说,go get命令内置了一定的代码包多版本依赖管理的功能。

到这里,我向大家介绍了go get命令的使用方式。go get

Ici, je vous présente comment utiliser la commande go get. La commande go get, comme les deux commandes présentées précédemment, est un outil auxiliaire indispensable lorsque nous écrivons des programmes en langage Go et construisons des projets en langage Go.

【Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation

】🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn