go build 命令一些可选项的用途和用法

在运行go build命令的时候,默认不会编译目标代码包所依赖的那些代码包。当然,如果被依赖的代码包的归档文件(*.a)不存在,或者源码文件有了变化,那么它还是会被编译。

如果要强制编译它们,可以在执行命令的时候加入标记-a,此时,不但目标代码包总是会被编译,它所依赖的代码包也总会被编译,即使依赖的是标准库中的代码包也是如此。

另外,如果不但要编译依赖包,还要安装它们的归档文件,可以加入标记-i.

如何确定哪些代码包被编译?

  1. 运行go build时加入标记-x, 这样可以看到go build命令具体执行了哪些操作,也可以加入标记-n, 这样可以只查看具体操作而不执行它们。
  2. 运行go build命令时加入标记-v,这样可以看到go build命令编译的代码包的名称,它与-a 标记搭配使用。

go get

go get是自动从一些主流公用代码仓库(如Github)下载目标代码包,并把它们安装到环境变量GOPATH包含的第一个工作区的相应目录中。如果存在环境变量GOBIN,那么仅包含命令源码文件的代码包会被安装到GOBIN指向的那个目录。

最常见的几个标记有下面几种:

-u :下载并安装代码包,不论工作区中是否已经存在它们。

-d :只下载代码包,不安装代码包。

-fix:在下载代码包后先运行一个用于根据当前Go 语言版本修正代码的工具,然后再安装代码包。

-t:同时下载测试所需的代码包

-insecure: 容许通过非安全的网络协议下载和安装代码。HTTP就是这样的协议

go语言官方提供的go get命令是比较基础的,其中并没有提供依赖管理的功能。目前GitHub上有很多提供了这类功能的第三方工具,如glide、gb以及官方出品的dep,vgo等等,它们在内部大都会直接使用go get

对代码包的远程导入路径进行自定义的方法是: 在该代码包中的库源码文件的包声明语句的右边加入注释,如下:

package semaphore //import "golang.org/x/sync/semaphore"

这个代码包原本的完整导入路径是 github.com/golang/sync/semaphore.这与实际存储它的网络地址对应的。该代码包的源码实际存在GitHub的golang组的sync代码仓库的semaphore目录下。而加入导入注释之后,用以下命令即可下载并安装该代码包了:

go get golang.org/x/sync/semaphore

而go语言官网golang.org下的路径/x/sync/semaphore并不是存放semaphore包的真实地址。我们称之为代码包的自定义导入路径。

不过,这还需要在golang.org这个域名背后的服务端程序上,添加一些支持才可能使用这条命令成功.

请参考: https://github.com/hyper0x/go_command_tutorial/blob/master/0.3.md

归档文件存放的位置和规则

源码文件会以代码包的形式组织起来,一个代码包其实就对应一个目录。安装某个代码包而产生的归档文件是与这个代码包同名的。

放置它的相对目录就是该代码包的导入路径的直接父级。如,一个已存在的代码包的导入路径是:

github.com/labstack/echo  

那么执行命令

go install github.com/labstack/echo

生成的归档文件的相对目录就是github.com/labstack,文件名为echo.a

顺便说下,上面这个代码包的导入路径还有另外一层含义,那就是:该代码包的源码文件存在于Github网址的labstack组的代码仓库echo中

归档文件的相对目录与pkg目录之间还有一级目录,叫做平台相关目录。平台相关目录的名称是由build(也称为“构建”)的目标操作系统、下划线和目标计算架构的代码组成的、

如,构建某个代码包的目标操作系统是linux,目标计算架构是64位,那么对应的平台相关目录就是linux_amd64.

因此,上述代码包的归档文件就会被存放在当前工作区的子目录:

pkg/linux_amd64/github.com/labstack中

golang学习笔记 go 相关命令的更多相关文章

  1. go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量

    go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量 下载安装:go get github.com/astaxie/beego 首页 - beego: 简约 & 强大并存 ...

  2. docker学习笔记-容器相关命令

    新建并启动容器 docker pull centos (先下载镜像,如果没有直接使用docker run 命令会根据本地情况进行下载) # docker run [可选参数] image # 参数说明 ...

  3. golang学习笔记8 beego参数配置 打包linux命令

    golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...

  4. golang学习笔记5 用bee工具创建项目 bee工具简介

    golang学习笔记5 用bee工具创建项目 bee工具简介 Bee 工具的使用 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/instal ...

  5. golang学习笔记19 用Golang实现以太坊代币转账

    golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...

  6. golang学习笔记18 用go语言编写移动端sdk和app开发gomobile

    golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...

  7. golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换

    golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...

  8. golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息

    golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...

  9. golang学习笔记7 使用beego swagger 实现API自动化文档

    golang学习笔记7 使用beego swagger 实现API自动化文档 API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/doc ...

随机推荐

  1. 微信小程序滚动tab的实现

    微信小程序滚动tab的实现 1.目的:为了解决滚动版本的tab,以及实现虹吸效果. 2.方案:自己动手写了一个Demo,用于测试实现如上的效果.其代码有做参考,在这里先声明.具体的参照如下:重庆大学二 ...

  2. windows zlib库编译步骤

    下载地址 http://www.zlib.net/ 动态库下载地址 如果自己实在不想编译的,可以直接下载 https://download.csdn.net/download/zhangxuechao ...

  3. FMDB的操作

    #import "ZYDataManager.h" #import "JSSportModel.h" FMDatabase *db = nil; @implem ...

  4. 第三篇Scrum冲刺博客

    第三篇Scrum冲刺博客 一.站立式会议 提供当天站立式会议照片一张 二.每个人的工作 成员 已完成工作 明天计划完成的工作 遇到的困难 林剑峰 初步完成用户界面 用户界面跳转到用户信息页面的按钮,设 ...

  5. 2.监控软件zabbix-客户端安装

    环境准备 Zabbix-Agent只要http://www.zabbix.com/download.php中可以下载的Zabbix-Agent均可以搭建Zabbix-Agent环境,本文选用CentO ...

  6. Django 练习班级管理系统八 -- 上传文件

    Form表单上传文件 修改 views.py import os def upload(request): if request.method == 'GET': img_list = models. ...

  7. python之便携式mysql类和tornado mysql长链接

    mymysql.py class MyMysql2(object): def __init__(self, host = '', user = '', passwd = '', db = '', po ...

  8. 三层架构介绍和MVC设计模型介绍

    springmvc是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层 进行职责解耦,基于请 ...

  9. 201871010123-吴丽丽 《面向对象程序设计(Java)》第八周学习总结

    201871010123-吴丽丽<面向对象程序设计(Java)>第八周学习总结 项目 内容   这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/  ...

  10. woocommerce调用分类描述另一种方法

    woocommerce是在wordpress基础上开发的,有些函数是通用的,有些需要自己调用,比如文章分类用category_description()就可以调用,而woocommerce的产品分类描 ...