Golang 文件目录最佳实践

首先参考前面 Golang 新项目实践 - 搭建环境 内容.

然后这次主要说说文件结构方面的内容:

方案一: 每个服务一个单独工程文件夹

  1. 以服务名创建一个目录, 比如 ~/demo-service-1, 然后添加 .envrc:
1
2
export GOPATH=`pwd`
export GOBIN=`pwd`/bin

这意为着在此创建了一个 GOPATH

  1. 然后创建 ~/demo-service-1/{bin,pkg,src} 路径

这个和正常全局的 GOPATH 是一样的.

  1. src 下创建服务

由于每个工程文件夹单独一个服务, 这里可以只创建一个文件夹, 并且和服务名一致.

~/demo-service-1/src/demo-service-1/

就是酱紫.

  1. 然后一般情况需要在服务下创建另一个 .envrc 用于翻墙
1
2
3
4
5
6
7
8
9
export GOPATH=`pwd`/../../
export GOBIN=`pwd`/../../bin

export all_proxy="socks5://127.0.0.1:1086"
export http_proxy="socks5://127.0.0.1:1086"
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
export rsync_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,192.168.1.*,192.168.31.*,localaddress,.localdomain.com"

Note: 这里需要注意, 如果不重复指定 GOPATH 会被覆盖. /(ㄒoㄒ)/~~

  1. 最后的文件结构如下:
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
➜  ~ > tree -a -L 3 demo-service-1
demo-service-1
├── .envrc
├── bin
├── pkg
└── src
└── demo-service-1
├── .envrc
└── glide.yaml

4 directories, 3 files

# 如果是多个项目, 还会有

➜ ~ > tree -a -L 3 demo-service-2
demo-service-2
├── .envrc
├── bin
├── pkg
└── src
└── demo-service-2
├── .envrc
└── glide.yaml

4 directories, 3 files

方案二: 每个项目一个单独工程

情况和上面类似, 只不过以项目为单位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
➜  ~ tree -a -L 3 demo-proj
demo-proj
├── .envrc
├── bin
├── pkg
└── src
├── demo-service-1
│   ├── .envrc
│   └── glide.yaml
└── demo-service-2
├── .envrc
└── glide.yaml

5 directories, 5 files

说说 Git 管理

Git 管理上, 一般 bin, pkg, 和 src 层级都是不提交的.

这意味着无论使用哪种结构组织方式, Git 上面代码都是以服务为单位:

  1. demo-service-1 -> https://github.com/company/demo-service-1.git
  2. demo-service-2 -> https://github.com/company/demo-service-2.git

说说 Glide 包依赖

在每个单独服务文件夹下, 用 glide 管理自己的依赖.

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.