重拾golang - go目录结构说明

go 目录结构说明

  golang集多编程范式之大成者,使开发者能够快速的开发、测试、部署程序,支持全平台静态编译。go具有优秀的依赖管理,高效的运行效率,庞大的第三方库支持以及在国内持续的增长势头。
  作为开发者的我们也将不得不重视这门语言的兴起。首先向大家讲解一下go语言开发环境的目录结构,让我们更清楚的认识它。

一、goroot开发包目录

    当我们安装好后,会在安装目录出现一个go/文件夹,如果是windows目录应在再C:/go下(默认),如果是unix/linux一般会在/usr/local/go下,这个目录是unix software resource的含义。
# liunx上目录位置
chao@chao-PC:/usr/local/go$ pwd
/usr/local/go

# 主要目录包含如下图,分别进行说明:

go-folder

1、api文件夹

    存放Go API检查器的辅助文件。其中,go1.1.txt、go1.2.txt、go1.3.txt和go1.txt文件分别罗列了不同版本的Go语言的全部API特征;except.txt文件中罗列了一些(在不破坏兼容性的前提下)可能会消失的API特性;next.txt文件则列出了可能在下一个版本中添加的新API特性。

2、bin文件夹

    存放所有由官方提供的Go语言相关工具的可执行文件。默认情况下,该目录会包含go和gofmt这两个工具。

3、doc文件夹

    存放Go语言几乎全部的HTML格式的官方文档和说明,方便开发者在离线时查看。

4、misc文件夹

    存放各类编辑器或IDE(集成开发环境)软件的插件,辅助它们查看和编写Go代码。有经验的软件开发者定会在该文件夹中看到很多熟悉的工具。
查看:
chao@chao-PC:/usr/local/go/misc$ ls
android  benchcmp  chrome   git  linkcheck  sortac  tour
arm      cgo       editors  ios  nacl       swig    trace

5、pkg文件夹

  用于在构建安装后,保存Go语言标准库的所有归档文件。pkg文件夹包含一个与Go安装平台相关的子目录,我们称之为“平台相关目录”。例如,在针对Linux 32bit操作系统的二进制安装包中,平台相关目录的名字就是linux_386;而在针对Windows 64bit操作系统的安装包中,平台相关目录的名字则为windows_amd64。
  Go源码文件对应于以“.a”为结尾的归档文件,它们就存储在pkg文件夹下的平台相关目录中。
  值得一提的是,pkg文件夹下有一个名叫tool的子文件夹,该子文件夹下也有一个平台相关目录,其中存放了很多可执行文件。关于这些可执行文件的用途,读者可参见附属于本书的Go命令教程。

查看:
chao@chao-PC:/usr/local/go/pkg$ ls
include      linux_amd64_dynlink  linux_amd64_shared              tool
linux_amd64  linux_amd64_race     linux_amd64_testcshared_shared

6、src文件夹

    存放所有标准库、Go语言工具,以及相关底层库(C语言实现)的源码。通过查看这个文件夹,可以了解到Go语言的方方面面。
查看:
chao@chao-PC:/usr/local/go/src$ ls
all.bash          clean.bat  errors    iostest.bash   os         sort
all.bat           clean.rc   expvar    log            path       strconv
all.rc            cmd        flag      make.bash      plugin     strings
androidtest.bash  cmp.bash   fmt       make.bat       race.bash  sync
archive           compress   go        Make.dist      race.bat   syscall
bootstrap.bash    container  hash      make.rc        reflect    testing
bufio             context    html      math           regexp     text
buildall.bash     crypto     image     mime           run.bash   time
builtin           database   index     naclmake.bash  run.bat    unicode
bytes             debug      internal  nacltest.bash  run.rc     unsafe
clean.bash        encoding   io        net            runtime    vendor

7、test文件夹

    存放测试Go语言自身代码的文件。通过阅读这些测试文件,可大致了解Go语言的一些特性和使用方法。

二、gopath工作区目录结构

  在环境变量中除了$GOPATH这样的显式变量外,Go语言还有两个隐含的环境变量——GOOS和GOARCH。
  GOOS代表程序构建环境的目标操作系统,可笼统地理解为Go语言安装到的那个操作系统的标识,其值可以是darwin、freebsd、linux或windows。
  GOARCH则代表程序构建环境的目标计算架构,可笼统地理解为Go语言安装到的那台计算机的计算架构的标识,其值可以是386、amd64或arm。

工作区有3个子目录:src目录、pkg目录和bin目录。

1、src目录

    用于以代码包的形式组织并保存Go源码文件。这里的代码包,与src下的子目录一一对应。例如,若一个源码文件被声明为属于代码包logging,那么它就应当被保存在src目录下名为logging的子目录中。当然,我们也可以把Go源码文件直接放于src目录下,但这样的Go源码文件就只能被声明为属于main代码包了。除非用于临时测试或演示,一般还是建议把Go源码文件放入特定的代码包中。
Go语言的源码文件分为3类:Go库源码文件、Go命令源码文件和Go测试源码文件。

2、pkg目录

    用于存放经由go install命令构建安装后的代码包(包含Go库源码文件)的“.a”归档文件。该目录与GOROOT目录下的pkg功能类似。区别在于,工作区中的pkg目录专门用来存放用户(也就是程序开发者)代码的归档文件。构建和安装用户源码的过程一般会以代码包为单位进行,比如logging包被编译安装后,将生成一个名为logging.a的归档文件,并存放在当前工作区的pkg目录下的平台相关目录中。

3、bin目录

 与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件。在Linux操作系统下,这个可执行文件一般是一个与源码文件同名的文件。而在Windows操作系统下,这个可执行文件的名称是源码文件名称加.exe后缀。
注意: 这里有必要明确一下Go语言的命令源码文件和库源码文件的区别。所谓命令源码文件,就是声明为属于main代码包,并且包含无参数声明和结果声明的main函数的源码文件。
这类源码文件可以独立运行(使用go run命令),也可被go build或go install命令转换为可执行文件。而库源码文件则是指存在于某个代码包中的普通源码文件。

三、go编译时,目录查找顺序

go工程包含依赖包管理,GOROOT,GOPATH三类目录来查找编译需要的库。他们的顺序如下:
  1. 从工程项目的root目录查找vendor目录中的依赖库。
  2. 从用户环境变量$GOPATH/src中查找依赖库。
  3. 从用户环境变量$GOROOT/src中查找依赖库。
  4. 未找到,抛出异常,编译终止。

总结:

    通过对golang的目录结构的了解和编译时查找依赖库的顺序,对这门语言有一个初步的认识,接下来我们将通过go的内部命令深入了解一下它。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值