Go学习笔记 -- Go基础

Go基础

GOPATH的意义

GOPATH的意义是Go语言的工作目录,它的值是目录的路径,当然,也可以是多个路径,每一个路径代表的是Go语言的一个工作目录(workspace)
然后领这些工作区,去防止Go语言的源码文件 Source file 、安装后的归档文件(install) 和可执行文件(executable file)
事实上,由于Go语言项目在其生命周期内的所有操作(编码、依赖管理、构建、测试、安装等)都是围绕着GOPATH和工作区域进行的。
1.Go语言源码的组织方式是怎样的;
2.是否了解源码安装的结果(只有在安装后,Go语言源码才能被我们或者其他代码使用);
3.你是否理解构建和安装Go程序的过程(这在开发程序以及查找程序问题的时候都很有用,可以少走很多弯路)

1.Go语言源码的组织方式
已代码包为基组织单位,文件系统中,这些代码包与目录一一对应的。由于目录可以有子目录,所以代码包也可以有子包。
代码包的名称一般会与源码文件所在的目录同名。如果不同名,那么在构建、安装的过程中会以代码包名称为准。
每个代码包都会有导入路径。代码包的导入路径是其他代码在使用该包中的程序实体时,需要引入的路径。在实际使用程序实体之前,我们必须先导入其所在的代码包。具体的方式就是import该代码包的导入路径。就像这样:
import “github.com/labstack/echo”
Go 语言源码的组织方式就是以环境变量 GOPATH、工作区、src 目录和代码包为主线的。一般情况下,Go 语言的源码文件都需要被存放在环境变量 GOPATH 包含的某个工作区(目录)中的 src 目录下的某个代码包(目录)中。
2.了解源码安装的结果
源码文件以及安装后的结果文件都会放到哪里呢?我们都知道,源码文件通常会被放在某个工作区的 src 子目录下。
那么在安装后如果产生了归档文件(以“.a”为扩展名的文件),就会放进该工作区的 pkg 子目录;如果产生了可执行文件,就可能会放进该工作区的 bin 子目录。

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

源码文件会以代码包的形式组织起来,一个代码包其实就对应一个目录。安装某个代码包而产生的归档文件是与这个代码包同名的。放置它的相对目录就是该代码包的导入路径的直接父级。比如,一个已存在的代码包的导入路径是
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 中。
在这里插入图片描述
(GOPATH 与工作区)

总之,需要记住的是,某个工作区的 src 子目录下的源码文件在安装后一般会被放置到当前工作区的 pkg 子目录下对应的目录中,或者被直接放置到该工作区的 bin 子目录中。

.3.理解构建和安装 Go 程序的过程

构建和安装 Go 程序的过程都是怎样的,以及它们的异同点

构建命令 go build
安装命令 go install

当构建库源码文件时(未包含main入口函数的源码文件),产生的结果文件存在零时文件目录,此时的构建主要目的是 检查和验证

当构建命令源码文件(包涵main入口函数的源码文件),此时结果文件会被搬运到源码文件所在的目录中

安装操作,会先执行构建,然后还会进行连接操作,并且把结果文件搬运到指定目录。

如果安装的是库源码文件,则会将文件生成到pkg目录下的某个子目录中。

如果安装的是命令源码文件,结果文件会存储到其所在工作区或者 环境变量中的GOBIN指向目录中。

总结
工作区和 GOPATH 的概念和含义是每个 Go 工程师都需要了解的。虽然它们都比较简单,但是说它们是 Go 程序开发的核心知识并不为过。

扩展

运行go build命令时加入标记-x,这样可以看到go build命令具体都执行了哪些操作。另外也可以加入标记-n,这样可以只查看具体操作而不执行它们。

运行go build命令时加入标记-v,这样可以看到go build命令编译的代码包的名称。它在与-a标记搭配使用时很有用。

下面再说一说与 Go 源码的安装联系很紧密的一个命令:go get。

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值