尽管还没有能力开始做一些真正的项目,但在学习别人代码的过程中,仍有时没法理解别人是如何将代码进行布局的,想想就打算先进行一个比较深入的了解,再来一个个的解决其它问题吧。
我学习在在Mac OSX上行进行的,我也习惯了使用github进行行代码管理。参考了许多网上的工程项目结构设置,于加上我还不成熟的思考,然后有了我的关于golang工程项目目录结构安排方式。
假设我们在来Mac上设置的整个Golang开发目录是这样的:
/Users/wyatt/newgo,这其实就是我所设置的目录,首先需要解决的一个问题便是将这个目录加到你的GOPATH中去,我是直接加到了~/.bash_profilep这个文件中:
1 | export GOPATH=$HOME/newgo |
完成之后,你需要source ~/.bash_profile加载一下新的配置,再可以使用env这个命令检查一下看目录设置是否成功了。
这个目录建成之后,继续这样做的:
1 | $ cd newgo |
上面这步,需要创建一个src目录,专门用于存放go源代码的项目,你的项目代码都在这个目录之下。为了你的代码可以在github上分享,需要创建以个你github帐户链接的目录。这步完成之后,你就可以将所有的项目直接在这个帐号目录下进行创建了。
这里我们演示一个新项目,就叫做mygo吧,即是你的项目名称了。
1 | $ cd ~/newgo/src/github.com/wwq0327 |
上面就创建上了一个主程序及两个包了。下面我们添加上代码。
1 | // mylib/lib1.go |
1 | // myconf/confi1.go |
1 | // myconf/conf2.go |
然后我们再将这两个库导入到主程序中去,在主程序中进行调用:
1 | // mygo.go |
这里需要注意调用路径,使用的是将src目录作为导入的根目录的。整个项目结果是这样的:
1 | $ tree . |
一切OK后,我们就可进行编译安装了。
1 | $ go build |
这两步完成之后,在newgo目录中就多了bin和pkg两个目录。编译的库文件mylib.a和myconf.a会出现在相应的目录中。而最终生成的mygo可执行程序。
对于包文件的命令,是一个包下N个功能不一样的.go程序,只是在归为一个包的时候,在程序的开始设置包名的时候,需要注意名称。如上面例子中,对于myconf这个包,里面存着着两个不同名字的程序,但程序中的package myconf却是相同的,这样的编译的时候,虽是两个文件,但编译出来的包,仍是一个文件的。