从0开始go语言-19|Go主题月

901 阅读4分钟

工 程 管 理

继续肝Go语言的工程管理相关知识。最近一直加班状态不好!

工程组织

golang的工程组织管理完全使用目录结构和package名来推导工程结构和构建顺序。

GOPATH

GOPATH这个环境变量是在讨论工程组织之前必须提到的内容。Gotool的大部分功能其实已经不再针对当前目录,而是针对包名,于是如何才能定位到对应的源代码就落到了GOPATH身上。字面理解就是通过GOPATH找到包名路径,从而定位到需要依赖的源码。

假设你有两个Go工程代码,比如我的项目一般读放在本地Documents下的work目录下 /Users/leixiaohong/Documents/work/go-juejin1另外一个Go项目在/Users/leixiaohong/Documents/gowork/go-juejin2那么GOPATH可以设置为:

export GOPATH=/Users/leixiaohong/Documents/work/go-juejin1:/Users/leixiaohong/Documents/gowork/go-juejin2

经过这样的设置后,你可以在任意位置对以上的2个工程进行构建,其实我觉得有点像配置环境变量。

目录结构

一个标准的Go语言工程包含以下几个目录:src、pkg和bin。目录src用于包含所有的源代码,是Gotool一个强制的规则,而pkg和bin则无需手动创建,如果必要Gotool在构建过程中会自动创建这些目录。

<calcproj> 
    ├─README 
    ├─AUTHORS 
    ├─<bin> 
        ├─calc 
    ├─<pkg> 
        └─<linux_amd64> 
            └─simplemath.a 
    ├─<src> 
        ├─<calc> 
            └─calc.go 
        ├─<simplemath> 
            ├─add.go 
            ├─add_test.go 
            ├─sqrt.go 
            ├─sqrt_test.go
  • README:所有的开源项目都有README主要是对本项目的简单介绍,通常看项目的第一件事是读本文档。
  • LICENSE:本工程采用的分发协议,所有开源项目通常都有这个文件。
  • src:所有的源码如例表示原代码被分为两个包calc包和simplemath里面分别是存的xxx.go源代码。
  • bin&pkg:一般,bin和pkg目录可以不创建,go命令会自动创建。

文档管理

对于程序员来说,我们所谓的文档,更多的是指代码中的注释、函数、接口的输入、输出、功能和参数说明,这些对于后续的维护和复用有着至关重要的作用。 将注释写好直接执行godoc -http=:90 -path="."命令,然后在浏览器访问连接http://localhost:90/就能看到注释的页面文档。若要将注释提取为文档,要遵守如下的基本规则。

  • 注释需要紧贴在对应的包声明和函数之前,不能有空行
  • 注释如果要新起一个段落,应该用一个空白注释行隔开,因为直接换行书写会被认为是正常的段内折行。
  • 开发者可以直接在代码内用// BUG(author): 的方式记录该代码片段中的遗留问题,这些遗留问题也会被抽取到文档中。 其实我觉得对于程序员来说最好的注释文档就是看代码,代码简洁到能看懂就ok。Go语言在这方面做的足够好。

工程构建

在有GOPATH配置的前提下,直接用go build命令来执行构建,但需要注意的是,在你构建可执行程序工程时,会在你所在的目录中生成可执行程序。如果你不希望calc到处都是,就选择一个你期望的目录, 比如go-juejin1目录下的bin目录。

$ go build calc

下一步是将构建成功的包安装到恰当的位置,具体指令如下:

$ go install calc

如果之前没有执行过go build命令,则go install会先执行构建,之后将构建出来的calc可执行文件放到bin目录下。如果目标工程是一个包,则会放置到pkg目录中对应的位置 pkg/linux_amd64/simplemath.a:

$ go install simplemath

后话

先写到这里,其实这个活动快到尾声了,说点心里话吧其实参加这个活动开始是看上奖品,其实有想过去刷题,但是我对Go语言语法不懂,对我自身没有任何好处,所以我选择看书,然后再加上自己的小小理解,写文章,写的很多不对的地方见谅,但是对我来说我多少学到了很多Go语言的知识,Go的函数多返回值,和对Error的处理,对我印象很深刻,包括Go的多线程编程,线程之间的通信等都让我眼前一亮,我发现自己很多知识知道但是不知道怎么表达出来,我准备在掘金把我表达不出来的java知识写出来这是后话,看书写文章,然后通过写文章把知识讲出来,来达到理解的程度。也是监督自己读书的一个习惯吧。自己看一遍,再写一遍,然后发布的时候我为了检查错别字还需要看一遍文章,一个知识点读三遍,比看一遍有作用多了吧!好了废话凑的都快400字了,闪了。

备注

本文正在参与「掘金Golang主题学习月」, 点击查看活动详情