现代 Go 应用(Modern Go Application)
Go 应用模板和应用现代实践的例子。
这个资源库试图收集使用 Go 语言进行应用开发的最佳实践。除了具体的语言细节,它还实现了各种独立于语言的实践。
现代 Go 应用涉及的一些领域:
- 架构
- 封装结构
- 构建应用程序
- 检验
- 配置
- 运行应用程序(例如在Docker中)
- 开发者环境/经验
- 遥测
为了帮助采用这些做法,这个资源库也可以作为新应用的模板。
特性
- 配置 (使用spf13/viper)
- 日志 (使用 logur.dev/logur 和 sirupsen/logrus)
- 错误处理 (使用 emperror.dev/emperror)
- 使用 Prometheus 和 Jaeger (通过 OpenCensus) 进行度量和追踪
- 健康检查 (使用 AppsFlyer/go-sundheit)
- 优雅地重启 (使用 cloudflare/tableflip) 和关闭。
- 支持多个服务器/守护进程实例 (使用 oklog/run)
- 消息传递 (使用 ThreeDotsLabs/watermill)
- MySQL 数据库连接 (使用 go-sql-driver/mysql)
Redis connection (使用 gomodule/redigo)由于缺乏使用被删除 (参见 #120)
初步步骤
要从模板中创建一个新的应用程序,请将这个仓库克隆(如果你还没有这样做的话)到你的 GOPATH 中,然后执行以下内容:
chmod +x init.sh && ./init.sh ? Package name (github.com/sagikazarmark/modern-go-application) ? Project name (modern-go-application) ? Binary name (modern-go-application) ? Service name (modern-go-application) ? Friendly service name (Modern Go Application) ? Update README (Y/n) ? Remove init script (y/N) y
它将版本库中的每个导入路径和名称更新为你的项目的值。查看并提交更改。
负载生成
为了测试或演示应用程序,它带有一个简单的负载生成工具。您可以使用它来测试示例端点并生成一些负载(例如,为了用数据填充仪表盘)。
请按照 etc/loadgen 中的说明进行操作。
灵感
请看 INSPIRATION.md,里面有一些文章、项目、代码例子的链接,这些都是我在做这个项目的时候受到的启发。
许可证
麻省理工学院许可证(MIT)。更多信息请参见许可证文件。