• golang学习笔记 go 相关命令


    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中

  • 相关阅读:
    python 各层级目录下的import方法
    Ubuntu更新python3.5到python3.7
    程序员的江湖--个人品牌
    产品经理看哪吒之魔童降世
    Python 相对路径和绝对路径--python实战(九)
    vim 下修改tab键为四个空格
    一个python问题引发的思考
    【python】多进程共享变量
    【python】spark+kafka使用
    【python】kafka在与celery和gevent连用时遇到的问题
  • 原文地址:https://www.cnblogs.com/saryli/p/11696922.html
Copyright © 2020-2023  润新知