微信公众号
- 数据库名用名词单数!
- 包名用名词单数!
- 可以使用GORM, 也可以不用,看自己喜好, 可以混着用。
.
├── FAQ.md
├── README.md
├── deployment
│   ├── const.go
│   ├── const_test.go
│   ├── local
│   │   ├── Dockerfile
│   │   ├── deploy.json
│   │   └── superconf.json
│   ├── prod
│   │   ├── Dockerfile
│   │   ├── deploy.json
│   │   └── superconf.json
│   └── test
│       ├── Dockerfile
│       ├── deploy.json
│       └── superconf.json
├── docs
│   ├── docs.go
│   ├── swagger.json
│   └── swagger.yaml
├── go.mod
├── go.sum
├── library
│   ├── README.md
│   ├── ecode
│   │   ├── common_ecode.go
│   │   ├── ecode.go
│   │   └── ecode_test.go
│   ├── superconf
│   │   └── config.go
│   └── util
│       ├── conf
│       │   ├── conf.go
│       │   └── conf_test.go
│       ├── cos
│       │   ├── client.go
│       │   ├── client_test.go
│       │   ├── gg.jpeg
│       │   └── mm.jpeg
│       ├── json_util.go
│       └── sms
│           ├── sms.go
│           └── sms_test.go
├── main.go
└── server
    ├── conf
    │   ├── config.go
    │   └── config_test.go
    ├── controller    // 也叫resource 层
    │   └── user_controller.go
    ├── dao     // 数据库连接池
    │   ├── dao.go
    │   ├── redis.go
    │   ├── redis_test.go
    │   ├── sql.go
    │   ├── sql_test.go
    │   └── sqlx.go
    ├── dto   // Data transfer object,  接收的参数获, 或者返回的结构体都可以在这里定义。
    │   └── common.go
    ├── middleware   /// 中间件
    │   ├── logger.go
    │   ├── middleware.go
    │   └── response.go
    ├── model          // 模型层, data access object(DAO) 定义在这里
    │   └── user_model.go
    ├── mq
    │   └── kafka
    │       ├── kafka.go
    │       └── kafka_test.go
    ├── router  // 路由层
    │   └── router.go
    ├── service   // 业务逻辑层, 也叫logic, operation 层
    │   └── user_service.go
    └── util
        ├── const.go
        ├── log.go
        └── log_test.go
- doc: api文档, 用go-swagger写文档
- 使用logrus记录日志
- 尽量使用WithFields打印日志, Feild中的字段要和当前打印日志的上下文相关, 如订单相关的日志如下打印
Log.WithFields(logrus.Fields{"order_id": 123456, "user_id": 1}).Errorf("订单付款失败: err: %s", err)- 所有单元测试要不能依赖其他包,需要单独可以运行(见阿里java开发手册)。
- mongo, mysql, redis的主机, 端口, 账户, 密码 见zookeeper 的superconf/union
- https://github.com/eddycjy/go-gin-example
- https://github.com/Keegan-y/gin_scaffold#%E6%96%87%E4%BB%B6%E5%88%86%E5%B1%82
- https://github.com/e421083458/gin_scaffold
- https://github.com/e421083458/go_gateway (这个项目的路由,和controller分层很值得学习)
go get -u github.com/swaggo/swag/cmd/swag 
swag init