1.go get 用于从远程代码残酷上下载并安装软件包指定的代码包会被下载到 %GOPATH 中包含的第一个工作区的 src 目录中go get -x github.com/go-errors/errors-x 查看过程命令go get可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。在上面这个示例中,我们从著名的代码托管站点Github上下载了一个项目(或称代码包),并安装到了环境变量GOPATH中包含的第一个工作区中。一般情况下,为了分离自己与第三方的代码,我们会设置两个或更多的工作区。我们现在有一个目录路径为/home/hc/golang/lib的工作区,并且它是环境变量GOPATH值中的第一个目录路径。注意,环境变量GOPATH中包含的路径不能与环境变量GOROOT的值重复。好了,如果我们使用go get命令下载和安装代码包,那么这些代码包都会被安装在上面这个工作区中。我们暂且把这个工作区叫做Lib工作区。在我们运行go get github.com/hyper-carrot/go_lib/logging之后,这个代码包就应该会被保存在Lib工作的src目录下,并且已经被安装妥当.另一方面,如果我们想把一个项目上传到Github网站(或其他代码托管网站)上并被其他人使用的话,那么我们就应该把这个项目当做一个代码包来看待。其实我们在之前已经提到过原因,go get命令会将项目下的所有子目录和源码文件存放到第一个工作区的src目录下,而src目录下的所有子目录都会是某个代码包导入路径的一部分或者全部。也就是说,我们应该直接在项目目录下存放子代码包和源码文件,并且直接存放在项目目录下的源码文件所声明的包名应该与该项目名相同(除非它是命令源码文件)。这样做可以让其他人使用go get命令从Github站点上下载你的项目之后直接就能使用它。远程导入路径分析:实际上,go get命令所做的动作也被叫做代码包远程导入,而传递给该命令的作为代码包导入路径的那个参数又被叫做代码包远程导入路径。go get命令不仅可以从像Github这样著名的代码托管站点上下载代码包,还可以从任何命令支持的代码版本控制系统(英文为Version Control System,简称为VCS)检出代码包。任何代码托管站点都是通过某个或某些代码版本控制系统来提供代码上传下载服务的。所以,更严格地讲,go get命令所做的是从代码版本控制系统的远程仓库中检出/更新代码包并对其进行编译和安装。go get命令在检出代码包之前必须要知道代码包远程导入路径所对应的版本控制系统和远程仓库的URL。如果该代码包在本地工作区中已经存在,则会直接通过分析其路径来确定这几项信息。go get命令支持的几个版本控制系统都有一个共同点,那就是会在检出的项目目录中存放一个元数据目录,名称为“.”前缀加其主命令名。例如,Git会在检出的项目目录中加入一个名为“.git”的子目录。所以,这样就很容易判定代码包所用的版本控制系统。另外,又由于代码包已经存在,我们只需通过代码版本控制系统的更新命令来更新代码包,因此也就不需要知道其远程仓库的URL了。对于已存在于本地工作区的代码包,除非要求强行更新代码包,否则go get命令不会进行重复下载。如果想要强行更新代码包,可以在执行go get命令时加入-u标记。这一标记会稍后介绍。如果本地工作区中不存在该代码包,那么就只能通过对代码包远程导入路径进行分析来获取相关信息了。首先,go get命令会对代码包远程导入路径进行静态分析。为了使分析过程更加方便快捷,go get命令程序中已经预置了几个著名代码托管网站的信息。一般情况下,代码包远程导入路径中的第一个元素就是代码托管网站的主域名。在静态分析的时候,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 // 导入注释中的导入路径  

https://github.com/hyper0x/go_command_tutorial/blob/71833ffcab991a2931d3106490d96008f45c3177/0.3.md

16. go get相关推荐

  1. 实现手机来电铃声,通知铃声、警告铃声等音频定制化功能(三,多媒体扫描结果定制处理)

    本篇博文主要是对MediaScanner中endFile方法的处理流程上的重构,以实现需求中的资源区域化定制.处理思路为首先扫描定制分区中的资源,在扫描系统分区下默认资源时判断定制分区西下是否已经存在 ...

  2. sqlserver错误码

    错误 6,000 到 6,999 错误 严重性 是否记录事件 说明 6001 10 否 SHUTDOWN 正在等待 %d 个进程完成. 6004 10 否 用户没有执行此操作的权限. 6005 10 ...

  3. Go 1.16 的这个新变化需要适应下:go get 和 go install 的变化

    原文地址: Go 1.16 的这个新变化需要适应下:go get 和 go install 的变化 一直以来,go get 用于下载并安装 Go 包.命令等,而 go install 在 module ...

  4. Ubuntu 16.04 安装后修改屏幕分辨率(xrandr: Failed to get size of gamma for output default)

    ubuntu 16.04 安装后分辨率只有一个选项 1024x768,使用 xrandr 命令出现错误: xrandr: Failed to get size of gamma for output ...

  5. Ubuntu 16.04 安装 Docker - Dependency failed for Docker Application Container

    Docker 安装 由于 apt 官方库里的 Docker 版本可能比较旧,所以先卸载可能存在的旧版本: sudo apt-get remove docker docker-engine docker ...

  6. java 16进制与图片互转

    十六进制转成图片 /*** 十六进制转成图片* @author Administrator**/public static void saveToImgFile(String src,String o ...

  7. 【CV】吴恩达机器学习课程笔记第16章

    本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片 机器学习 | Coursera 吴恩达机器学习系列课程_bilibili 目录 16 推荐系统 16-1 问题规划 16-2 基于内容的推 ...

  8. python 16进制转10进制, 8进制转10进制, 2进制转10进制的方法

    python 16进制转10 进制, 8进制转10进制, 2进制转10进制 可以使用系统自带的 int 方法 具体如下: value = "0x1388" result = int ...

  9. java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode

    问题出现在在定义一些常量的时候 这个定义的数据不要超过16  ,这个问题就是定义超过了 16 , 用16进制的最好.

  10. Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16 declared in lib

    今天导入饺子库提示 sdk 不能低于16的错误提示,导致build 失败 处理方法: 我把15 改成了16即可编译通过 这个是之前写的,目前各大应用平台要求最低是26了,

最新文章

  1. C# EF 基础操作
  2. PHP内核探索之变量(4)- 数组操作
  3. PDF转换图片,图片的切割,图片转换PDF以及PDF加水印等记录贴
  4. 非递归快速排序php,快排序的非递归实现(原创)
  5. Python 3.5.2建立与DB2的连接
  6. 破解sina新浪邮箱密码
  7. C#类型与SQLSEVER类型对比
  8. 读excel_基础 | Excel中单元格的引用方式,读这篇就够了!
  9. ThihkPHP开发聚合支付系统源码 兼容所有易支付程序
  10. TouchJSON的简单使用
  11. [转]Magento2开发教程 - 如何向数据库添加新表
  12. 为什么AI需要的是角色扮演,而不是象棋和围棋?
  13. 信息系统运行维护服务方案(IT运维服务方案)
  14. 数字化场景——数字化营销
  15. 软件测试项目实战学习路线
  16. 箱线图2种画法-直接给出各个四分位值或者数据集
  17. roundcube邮箱手机端_企业邮箱申请后如何登录
  18. m个苹果放在n个盘子里面有多少种放法?(动态规划)
  19. 龙迅LT86102SXE 是 Lontium 的第 4 代 2 端口 HDMI/DVI 分配器
  20. Android 10 SystemUI 如何隐藏状态栏输入法图标

热门文章

  1. 【转】服务发现:Zookeeper vs etcd vs Consul
  2. 译注(1): 为什么大多数编程语言里,= 号被用来做赋值操作符?
  3. idea 设置代码的颜色
  4. react中对props.children进行操作
  5. PHP表单常用正则表达式(URL、HTTP、手机、邮箱等)
  6. windows 下安装 mysql
  7. android 常用代码
  8. 几个北邮和交大学霸的公众号,值得学习
  9. 不要残渣10w+,推荐8个我平时看的公众号
  10. SonarQube 7.7默认数据库连接方法