首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   imherer · 35 天前 · 3615 次点击
    这是一个创建于 35 天前的主题,其中的信息可能已经有所发展或是发生改变。
    谢过各位大佬啦🤗
    第 1 条附言  ·  34 天前
    感谢各位的回复

    可能部分人被 #1 贴目录结构给带偏了

    我想要的是 #13 这样的结果,即单个项目的目录结构,至于是使用 go mod 还是放在 GOPATH 里这个看个人习惯了

    再次感谢所有各位的回复!
    29 回复  |  直到 2019-01-17 11:56:42 +08:00
        1
    zicla   35 天前   ♥ 3
    我来说说我开源的云盘 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 文件
    ```
        2
    mosliu   35 天前   ♥ 1
    类似楼上
    但是没放系统的 GOPATH 里面
    放到了某目录下面的
    src\github.com\mosliu\项目名
        3
    mosliu   35 天前
    gopath 加上这个项目就好 现在觉得 go mod 挺好用
        4
    imherer   35 天前
    @mosliu 嗯,我也是在用 go mod
        5
    jlkm2010   35 天前
    使用 go mod
        6
    scukmh   35 天前
    go mod~\(≧▽≦)/~万岁
        8
    zhujinliang   35 天前 via iPhone
    目前还没能接受 go mod 等模式,只习惯 gopath,每个项目单独 gopath
        9
    davex   35 天前   ♥ 2
    https://zhuanlan.zhihu.com/p/48039838 最近入坑 Golang,参照了一下知乎的技术栈升级的文章,大部分还是蛮有用的
        10
    tomoya92   35 天前 via iPhone   ♥ 1
    我就在根目录下开发的 https://github.com/tomoya92/pybbs-go
        11
    gamexg   35 天前   ♥ 1
    . # 项目根路径
    ├── cmd/
    │ ├── aaa/ # 可执行文件 aaa 目录,一般这个目录只放个 main.go 、配置文件例子等少数内容。具体代码在 common/aaa/ 下。
    │ ├── main.go
    ├── common/ # 项目内部库
    │ ├── aaa/ # 可执行文件 aaa 的具体内容,不过具体各个功能会拆分到 common 下独立目录
    │ ├── lib1/ # 项目拆分的模块 1
    │ ├── lib2/ # 项目拆分的模块 2

    配合 go mod
        12
    reus   35 天前
    全放一个目录
        13
    mritd   35 天前   ♥ 2
    自己弄了个基于 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
    ```
        14
    88250   35 天前   ♥ 1
        15
    sunjourney   34 天前
    @zicla 你的结构不分领域全放 rest package 下呀
        16
    menghan   34 天前
    用什么结构,要看你的项目是库,是 framework,还是完整的 program。
        17
    my3157   34 天前
        18
    zicla   34 天前
    @sunjourney 这个项目不大,于是全部放到 rest 这个 package 下面了。 如果是很庞大的项目,自然需要按照模块来划分了,不过 golang 里面的跨 package 引用需要注意处理一下
        19
    bzshow1   34 天前   ♥ 1
        20
    hekunhotmail   34 天前
    收藏
        21
    leiuu   34 天前
    @zicla 请教一下,这种目录结构的是怎么打印出来的呢
        22
    hpeng   34 天前
    @leiuu tree
        23
    zicla   34 天前
    @leiuu 就是用那几个特殊字符,一行一行的排布 没啥高级的技巧。。。
        24
    coldwarm7   34 天前
    可以参考一下 beego 的结构目录
        25
    YingJie   34 天前 via Android
    @leiuu win 下 tree
        26
    pythondean   34 天前 via iPhone
    @my3157 这个有点大,国情是大部分都是用来写 api.大佬有没有简化版的
        27
    workwonder   34 天前 via Android
    我刚入坑 golang 一月左右,做了一个小小项目。
    感觉 go mod 是一个本来就该这样的模式,不知道为什么值得称赞,大概是之前那种操作太变态了。我也是在项目即将做好时才尝试 go mod 的,感觉释然。
        28
    workwonder   34 天前   ♥ 1
    这是我第一个 golang 项目的目录结构,一个很简单的评论服务。

    ```
    ➜ talk git:(master) tree .
    .
    ├── config.sample.yaml
    ├── db-migrations
    │   ├── 20190102173600-init-schema.sql
    │   ├── 20190109170100-rename-tags.sql
    │   └── README.txt
    ├── Dockerfile
    ├── go.mod
    ├── go.sum
    ├── README.md
    ├── server.go
    └── talk
    ├── api.go
    ├── config.go
    ├── config_test.go
    ├── core.go
    ├── db.go
    ├── errors.go
    ├── logging.go
    ├── mid_auth0.go
    ├── mid_method_override.go
    ├── mid_request_id.go
    ├── router.go
    ├── utils_http.go
    ├── utils_tags.go
    └── utils_test.go
    ```
        29
    motecshine   34 天前   ♥ 1
    ```
    .
    ├── README.md
    ├── actors
    │   ├── reactor.go
    │   └── worker.go
    ├── configs
    │   ├── configs.go
    │   ├── prod.config.yaml
    │   └── test.config.yaml
    ├── containers
    │   └── container.go
    ├── db
    │   ├── redis.go
    │   └── tidb.go
    ├── debug.py
    ├── helpers
    │   └── logs.go
    ├── logs
    │   ├── ParkInfo.log
    │   └── ParkInfo.log.20190117093012
    ├── main.go
    ├── prod.env
    ├── queue
    │   └── mq.go
    ├── start.sh
    ├── test.env
    ├── v3_older
    │   ├── handlers
    │   │   ├── common.go
    │   │   ├── heartbeat.go
    │   │   └── parkinfo.go
    │   ├── models
    │   │   ├── park_channel.go
    │   │   └── park_equipment.go
    │   └── proto
    │   ├── proto.go
    │   └── v4043.go
    └── v4
    ├── handlers
    │   ├── common.go
    │   ├── heartbeat.go
    │   └── parkinfo.go
    ├── models
    │   ├── park_info_connect.go
    │   ├── park_info_option.go
    │   └── park_info_space.go
    └── proto
    ├── common.go
    ├── park_connect.go
    ├── park_option.go
    └── park_space.go

    ```
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3213 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 45ms · UTC 05:02 · PVG 13:02 · LAX 21:02 · JFK 00:02
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1