Golang 工程自管理
有用过VS或者Eclipse的同学一定对左边一列(也可能放右边或下边或者隐藏起来)工程目录记忆尤新。 尤其是有一大堆依赖包、库的时候,目录结构更是复杂。其实这都不是大问题。 熟悉自己工程的自然很适应这种结构。但是当大家去看一些C/CPP工程的时候,其目录结构各自不同。 虽然有一些大家都懂的“src/bin/lib”这些目录。但每个工程之间还是各自不同的。 这样在接触他人项目的时候不免会折腾一番。而且当你拥有多个项目的时候。 如果不自己好好安排好他们的地理位置,也会给自己的带来很多麻烦。 还记得小明问你要代码的时候,你在 各个目录之间飞梭寻找的情景么?而这一切在Golang中却得到了有力的保障。 Golang在语言层面(或者说编译器工具层面更合理)规定了一个开发人员的目录结构以及 各类文件的地理位置 ,并且这种管理天生就迎合了开源的思想、迎合了Git、Mercury的管理模式。设想一下。 你在自己的一个固定的目录里面看到 src/github.com/nsf/gocode 会咋想。这还想?不用想都知道 是放在Github上的一个项目,看看Readme里面就知道他干什么了。 另外再也不用Makefile、autotools管理bin文件以及lib文件的位置了。 (这里很多是相对于同样需要编译的C/CPP来说的 ,不喜请绕)。 工程自管理步骤这里要说的不仅是一个推荐,其中部分也是强制的。比如你可以不用类似github.com/nsf/的目录结构。 但是必须要有bin和src目录。 安装Golang首先当然还是来安装咱们的Golang。rpm系 export PATH=$PATH:YOUR_GO_DIR/bin/ 运行go version 查看下是否能正常看到go的版本信息。如果看到了则说明安装成功了。 安装过JRE/JDK的同学都知道安装完了还要设置JAVA相关的环境变量。那么安装完Golang以后要设置啥 环境变量呢?设置几个呢?看到了上面的版本信息,其实我想说不设置也是可以看到 GOPATH=YOUR_GO_PROJECT_DIR 这里的 export PATH=$PATH:$GOPATH/bin 好。到这里咱们的基本工作就算完成了。也就是安装好Golang了。等下,既然我们有了$GOPATH, 那么我们的相关目录肯定得建上。依次建上bin和src目录 mkdir -p $GOPATH/src $GOPATH/bin 好了。完美。 编译操作有了上面的准备,创建了基本的目录并设置好环境变量后就可以开始hello world了(编程的不要说 不知道hello world哦)。 首先把hello world的源码写上。 mkdir -p $GOPATH/src/github.com/you/helloworld cd $GOPATH/src/github.com/you/helloworld emacs helloworld.go package main import ("fmt") func main(){ fmt.Print("Hello World n") } 有了源码以后咋编译呢?可以使用cgo,gcc对golang的支持,那样就太自助了,不是我们这里所说 的的的"自我管理"要讲的,这里要讲一个更简便的方法。通过go tools系列工具帮我们完成自动化 管理过程。 首先我们想立刻看下这个程序的结果,那么我们可以 go run helloworld.go 来快速的进行验证。 验证完了以后。我们最终还是要把他编译成二进制文件。这个时候用 go build 就在helloworld.go所在目录下运行。我们会看到当前目录下生成了可执行文件 ./helloworld 可以看到程序的输出结果。 当发布程序的时候。运行 go install 在 $GOPATH/bin/目录下就会生成对应的文件了。 这里我们可以把 这里一再提到自管理,因为这样在这样的目录格式下,这套工具才有效,而且合理的规范的了源码结构。 虽然在src目录下的结构不是强制的,但是这样按照 "webserver.com/user/project" 的方式看着也不错 而且在想放到github或者bitbucket上的时候。只要cd到相应目录下: git remote add git add * git commit git push 就可以完成管理。 上面说到了可执行文件的生成。那么怎么生成包呢? 首先要将main函数名替换调,这个和c/cpp,java一样,入口不能编译到包里面。然后运行 go build/intall 就会在当前目录或者 $GOPATH/pkg/bin_platform/github.com/you/ 目录下生成相应的包了,包为 文件名.a ,go tools默认生成静态库。 之后在其他代码中就可以通过 import("github.com/you/yourpackage") 的方式引用该包了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |