Go-Spring 的愿景是让 Go 程序员也能用上如 Java Spring 那般威力强大的编程框架。
其特性如下:
- 提供了完善的 IoC 容器,支持依赖注入、属性绑定;
- 提供了强大的启动器框架,支持自动装配、开箱即用;
- 提供了常见组件的抽象层,支持灵活地替换底层实现;
Go-Spring 当前使用 Go1.12 进行开发,使用 Go Modules 进行依赖管理。
Go-Spring 不仅实现了如 Java Spring 那般功能强大的 IoC 容器,还扩充了 Bean 的概念。在 Go 中,对象(即指针)、数组、Map、函数指针,这些都是 Bean,都可以放到 IoC 容器里。
常用的 Java Spring 注解 | 对应的 Go-Spring 实现 |
---|---|
@Value |
value:"${}" |
@Autowired @Qualifier @Required |
autowire:"?" |
@Configurable |
WireBean() |
@Profile |
ConditionOnProfile() |
@Primary |
Primary() |
@DependsOn |
DependsOn() |
@ConstructorBinding |
RegisterBeanFn() |
@ComponentScan @Indexed |
Package Import |
@Conditional |
NewConditional() |
@ConditionalOnExpression |
NewExpressionCondition() |
@ConditionalOnProperty |
NewPropertyValueCondition() |
@ConditionalOnBean |
NewBeanCondition() |
@ConditionalOnMissingBean |
NewMissingBeanCondition() |
@ConditionalOnClass |
Don't Need |
@ConditionalOnMissingClass |
Don't Need |
@Lookup |
—— |
Go-Spring 不仅支持对普通数据类型进行属性绑定,也支持对自定义值类型进行属性绑定,而且还支持对结构体属性的嵌套绑定。
type DB struct {
UserName string `value:"${username}"`
Password string `value:"${password}"`
Url string `value:"${url}"`
Port string `value:"${port}"`
DB string `value:"${db}"`
}
type DbConfig struct {
DB []DB `value:"${db}"`
}
上面这段代码可以通过下面的配置进行绑定:
db:
-
username: root
password: 123456
url: 1.1.1.1
port: 3306
db: db1
-
username: root
password: 123456
url: 1.1.1.1
port: 3306
db: db2
Go-Spring 提供了一个功能强大的启动器框架,不仅实现了自动加载、开箱即用,而且可以非常容易的开发自己的启动器模块,使得代码不仅仅是库层面的复用。
下面的示例使用 v1.0.5 版本测试通过。
import (
"context"
"github.com/go-spring/spring-boot"
_ "github.com/go-spring/starter-echo"
)
func init() {
SpringBoot.RegisterBean(new(Service)).Init(func(s *Service) {
SpringBoot.GetBinding("/", s.Echo)
})
}
type Service struct {
GoPath string `value:"${GOPATH}"`
}
type EchoRequest struct{}
func (s *Service) Echo(ctx context.Context, req *EchoRequest) interface{} {
return s.GoPath
}
func main() {
SpringBoot.RunApplication()
}
启动上面的程序,控制台输入 curl http://localhost:8080/
, 可得到如下结果:
{"code":200,"msg":"SUCCESS","data":"/Users/didi/go"}
更多示例: https://github.com/go-spring/go-spring/tree/master/examples
如何成为贡献者?提交有意义的 PR 或者需求,并被采纳。
QQ群号:721077608
The Go-Spring is released under version 2.0 of the Apache License.