由于 Go-Spring 是由我个人发起的项目,还不是团队作战,而且我在公司的主业务也很忙,所以基本上处于我有时间了就会更新的情况,但长此下去对 Go-Spring 的发展极为不利,也满足不了大家对 Go-Spring 的期待,所以欢迎对 Go-Spring 感兴趣的开发者参与到 Go-Spring 的日常开发和运营中来!
我个人认为目前 Go-Spring 实现了两个非常核心的特性:IoC 容器和开箱即用。
- IoC 容器可以满足对依赖注入、属性绑定、对象初始化的需求;
- 开箱即用可以满足对自动配置、依赖管理、第三方类库集成的需求。
有了这两大基本功能,GoLang 开发基本上算是摆脱了茹毛饮血的初级阶段。随着项目的不断完善,后面 GoLang 开发肯定会进入更高级的层次。
Go-Spring 主推两种编程**:面向接口编程和面向模块编程。
- Go-Spring 为常见的业务领域提供了一个抽象层,通过抽象层可以屏蔽底层的实现细节,可以灵活的切换底层方案。
- Go-Spring 将不同的业务领域封装成模块,在内部注册模块所需的对象,通过 Starter 机制实现开箱即用的能力。
Go-Spring 有两个仓库,一个是实现 IoC 容器特性的主项目所在的 didi 仓库,另一个是实现开箱即用特性的 Starters 项目所在的 go-spring仓库。
实现完善的 IoC 容器功能,支持数组对象注入,支持更多类型的属性绑定,可能会支持 Bean 设置顺序;
SpringWeb: 为 Echo、Gin 等社区流行的 Go Web 服务实现一个抽象层,目前 SpringWeb 和 SpringRPC 的功能重合,未来 SpringWeb 的接口会重构,更贴近现有的 Web 服务的接口;
SpringRPC: 为 Http、Thrift、gRPC、Dubbo 等社区流行的 RPC 服务实现一个抽象层,现在项目中有一个示例,可以证明通过 SpringRpcContext 有机会将上层接口统一;
SpringLog: 为一般日志场景和微服务所需的 Trace 场景提供日志支持,目前规划实现一个 TraceContext 结构,内部包含一个 context.Context 对象,一个 Trace 对象,并且实现 Log 接口,还提供一个 CopyTrace 方法。
TODO
代码必须使用 goimports
进行格式化,格式化的命令是 goimports -w -format-only *
。如果你使用的是 IDEA 开发工具,请按照以下步骤进行配置:
- Editor -> Code Style -> Go,选中 Imports 标签;
- Sorting type 选择
goimports
; - 选中
Add parentheses for a single import
; - 选中
Group stdlib imports
; - 选中
Move all stdlib imports in a single group
; - 选中
Move all imports in a single declaration
;
Go-Spring 是模仿 Java 的 Spring 全家桶实现的一套 GoLang 的应用程序框架,遵循“习惯优于配置”的原则,提供了依赖注入、自动配置、开箱即用、丰富的第三方类库集成等功能,能够让程序员少写很多的样板代码。
完整的 go-spring 项目一共包含 6 个模块,当前模块仅实现了基础的 IOC 容器的能力,该模块可以独立使用,但是配合其他模块才能使得效率最大化。其他模块发布在 https://github.com/go-spring 仓库下。下面是所有模块的列表:
1、程序启动框架
AppRunner
2、核心功能模块
GoSpring
3、启动器核心组件
GoSpringBoot
4、开源微服务组件
GoSpringCloud
5、多个项目启动器
GoSpringBootStarter
GoSpringCloudStarter
- 面向接口编程
- 面向模块化编程
- 简单的启动器框架
- 依赖注入、属性注入
- 项目依赖管理
- 简化的 http test 框架
- 支持多种配置文件格式
- 支持多环境配置文件
- 统一的代码风格
- 自动加载配置、模块
- 丰富的示例,极易上手
- 一个单词的包名采用小写格式(Maybe)
- 多个单词的包名使用首字母大写的格式
- HTTP 接口强制使用 POST 方法
- 业务代码允许 panic 中断请求
- 返回值包含详细的错误信息 …
- AppRunner
- SpringContext
- Bean 管理
- Bean 注入,autowire
- 属性注入,value
- SpringBootApplication,适配 AppRunner
- 启动器框架,Starters
- 常用模块简介,Web、Redis、Mysql 等
- Spring-Message 框架
- Spring-Check + RPC框架
- 继承 Java Spring 全家桶的设计原则,但不照搬照抄,适应 Go 语言
- 形成滴滴的 Go 项目和代码规范
- 完整支持微服务框架,监控、日志跟踪等
- 和 dubbo 协议、框架打通
- 创建新项目的工具软件
- 探索无服务器架构支持
- 管理端点 endpoint
- 更丰富的 debug 信息输出
- 支持用户配置覆盖模块默认配置
- 支持禁用特定的自动配置
- 定制 banner
- 属性支持占位符,松散绑定等高级特性 …
TODO
TODO
如何成为外部贡献者? 提交有意义的PR,并被采纳。
This is not an official Didi product (experimental or otherwise), it is just code that happens to be owned by Didi.