在开发golang组件的时候需要版本管理及组件管理,自己形成了一套模式框架,对于常规项目开发可以方便套用。
工具
- 使用glide工具进行第三方版本包管理,不用依赖环境变量$GOPATH
- 使用makefile作为脚本工具,管理下载三方包,构建,打包
- 使用emacs+gocode来进行代码编写
目录结构
1 2 3 4 5 6 7 8 9
| . ├── Makefile :脚本 ├── bin :组件产物输出目录,不用进行版本管理 ├── conf :配置脚本 ├── glide.lock :glide生成的文件 ├── glide.yaml :glide生成的文件 ├── pkg :gocode需要根据这个目录.a文件进行自动补全 ├── src :源代码目录 └── vendor :glide下载的三方代码放置在这个目录,不用进行版本管理
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| PWD := $(shell pwd) GO := go GLIDE := glide GOCODE := gocode TARGET := IATOpenAPI VENDOR := ${PWD}/vendor GOPATH := ${PWD}/gopath OUT := ${PWD}/bin/ OUT_TARGET := ${PWD}/bin/${TARGET} all: deps build package init: rm -f glide.yaml export GOPATH=${PWD} && ${GLIDE} init deps: rm -rf ${GOPATH}/src mkdir -p ${GOPATH}/src export GOPATH=${PWD} && ${GLIDE} install ln -s ${VENDOR}/* ${GOPATH}/src/ build: export GOPATH=${PWD}:${GOPATH} && ${GO} build -o ${OUT_TARGET} ${PWD}/src/main.go clean: rm -fr ${OUT}/* package: cd ${OUT} && tar cvzf mock.tar.gz ${TARGET} config.yaml gocode: ${GOCODE} close GOPATH=${PWD} ${GOCODE} -s &
|
- 自动补全配置:spacemacs打开两个layer:go,autocomplete;gocode使用到了$GOPATH,需要根据项目目录来配置$GOPATH,配置启动方式我放在makefile脚本里。
- 代码跳转配置:go-guru使用到了环境变量$GOPATH,因此根据项目目录来配置$GOPATH,配置方式可以通过打开emacs后
M-x setenv <RET> GOPATH <RET> GO_DIRS
来设置。