入 Go 的坑,大佬分享下你们的项目结构

2019-01-16 11:12:56 +08:00
 imherer
谢过各位大佬啦🤗
14710 次点击
所在节点    程序员
30 条回复
zicla
2019-01-16 11:19:54 +08:00
我来说说我开源的云盘 https://github.com/eyebluecn/tank 吧,采用前后端分离,后端使用 golang 编写,项目结构基本上遵循官方建议的结构:

```
golang #环境变量 GOPATH 所在路径
├── bin #编译生成的可执行文件目录
├── pkg #编译生成第三方库
├── src #golang 工程源代码
│   ├── github.com #来自 github 的第三方库
│   ├── golang.org #来自 golang.org 的第三方库
│   ├── tank #clone 下来的 tank 根目录
│   │   ├── build #用来辅助打包的文件夹
│   │   │   ├── conf #默认的配置文件
│   │   │   ├── doc #文档
│   │   │   ├── html #前端静态资源,从项目 tank-front 编译获得
│   │   │   ├── pack #打包的脚本
│   │   │   ├── service #将 tank 当作服务启动的脚本
│   │   ├── dist #运行打包脚本后获得的安装包目录
│   │   ├── rest #golang 源代码目录
│   │   │   ├── ... #golang 源代码 不同文件用前缀区分
│   │   ├── .gitignore #gitignore 文件
│   │   ├── CHNAGELOG #版本变化日志
│   │   ├── DOCKERFILE #构建 Docker 的文件
│   │   ├── LICENSE #证书说明文件
│   │   ├── main.go #程序入口文件
│   │   ├── README.md #README 文件
```
mosliu
2019-01-16 11:28:23 +08:00
类似楼上
但是没放系统的 GOPATH 里面
放到了某目录下面的
src\github.com\mosliu\项目名
mosliu
2019-01-16 11:28:49 +08:00
gopath 加上这个项目就好 现在觉得 go mod 挺好用
imherer
2019-01-16 11:29:31 +08:00
@mosliu 嗯,我也是在用 go mod
jlkm2010
2019-01-16 11:29:32 +08:00
使用 go mod
scukmh
2019-01-16 12:13:32 +08:00
go mod~\(≧▽≦)/~万岁
fyibmsd
2019-01-16 12:20:56 +08:00
zhujinliang
2019-01-16 12:22:08 +08:00
目前还没能接受 go mod 等模式,只习惯 gopath,每个项目单独 gopath
davex
2019-01-16 12:24:27 +08:00
https://zhuanlan.zhihu.com/p/48039838 最近入坑 Golang,参照了一下知乎的技术栈升级的文章,大部分还是蛮有用的
tomoya92
2019-01-16 12:29:07 +08:00
我就在根目录下开发的 https://github.com/tomoya92/pybbs-go
gamexg
2019-01-16 12:47:02 +08:00
. # 项目根路径
├── cmd/
│ ├── aaa/ # 可执行文件 aaa 目录,一般这个目录只放个 main.go 、配置文件例子等少数内容。具体代码在 common/aaa/ 下。
│ ├── main.go
├── common/ # 项目内部库
│ ├── aaa/ # 可执行文件 aaa 的具体内容,不过具体各个功能会拆分到 common 下独立目录
│ ├── lib1/ # 项目拆分的模块 1
│ ├── lib2/ # 项目拆分的模块 2

配合 go mod
reus
2019-01-16 12:52:14 +08:00
全放一个目录
mritd
2019-01-16 12:59:45 +08:00
自己弄了个基于 gin 的 mvc 的架子 https://github.com/mritd/ginmvc
还没完善完,仅供参考

```sh
.
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── auth
│   ├── casbin.go
│   ├── consts.go
│   └── jwt.go
├── cache
│   ├── gocache.go
│   └── redis.go
├── conf
│   └── config.go
├── db
│   ├── gormrus.go
│   └── mysql.go
├── ginengine
│   └── engine.go
├── ginmvc.yaml
├── go.mod
├── go.sum
├── main.go
├── middleware
│   ├── jwt.go
│   ├── log.go
│   ├── middleware.go
│   ├── rbac.go
│   ├── recovery.go
│   └── session.go
├── models
│   ├── auto_migrate.go
│   ├── test_module.go
│   └── user.go
├── resources
├── routers
│   ├── health.go
│   ├── router.go
│   ├── static.go
│   ├── templates.go
│   ├── user.go
│   └── web.go
├── static
│   ├── css
│   ├── img
│   ├── js
│   └── webfonts

├── templates
│   └── index.html
├── utils
│   ├── char.go
│   └── common.go
└── version.go
```
88250
2019-01-16 13:00:57 +08:00
sunjourney
2019-01-16 14:45:17 +08:00
@zicla 你的结构不分领域全放 rest package 下呀
menghan
2019-01-16 14:55:47 +08:00
用什么结构,要看你的项目是库,是 framework,还是完整的 program。
my3157
2019-01-16 16:08:44 +08:00
zicla
2019-01-16 16:37:24 +08:00
@sunjourney 这个项目不大,于是全部放到 rest 这个 package 下面了。 如果是很庞大的项目,自然需要按照模块来划分了,不过 golang 里面的跨 package 引用需要注意处理一下
bzshow1
2019-01-16 17:17:50 +08:00
hekunhotmail
2019-01-16 17:18:56 +08:00
收藏

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527505

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX