A simple and component-based microservice kit for go. 一个简单的基于组件的 Go 微服务套件。
MIT License
EGO是一个集成了各种工程实践的框架。通过组件化的设计模式,保证了业务方能够统一的调用方式启动各种组件
使用EGO的优势
我们工程师要想提升组件熟练度,首先要大量看开源组件文档和代码,然后坚持长时间使用,才能形成肌肉记忆,提升我们做业务的速度。而这一切所投入的时间和精力是非常大的。
要减少这个投入成本,让更多开发者使用好优秀的开源组件,EGO的做法是标准化所有开源组件,对其做一层封装,统一各种行为。
让人掌握了一种组件,就可以举一反三使用其他组件。
我们支持多种EGO组件,加快你的开发速度
Component Name | Code | Example | Doc |
---|---|---|---|
HTTP Server | Code | Example | Doc |
gRPC Server | Code | Example | Doc |
Governance Service | Code | Example | Doc |
Job | Code | Example | Doc |
Corn job | Code | Example | Doc |
Distributed Scheduled Job | Code | Example | Doc |
HTTP Client | Code | Example | Doc |
gRPC Client | Code | Example | Doc |
gRPC Client using ETCD | Code | Example | Doc |
gRPC Client using k8s | Code | Example | Doc |
Sentinel | Code | Example | Doc |
MySQL | Code | Example | Doc |
Redis | Code | Example | Doc |
Redis Distributed lock | Code | Example | Doc |
Mongo | Code | Example | Doc |
Kafka | Code | Example | Doc |
ETCD | Code | Example | Doc |
K8S | Code | Example | Doc |
Oauth2 | Code | Example |
我们框架分为三个层次
我们认为一切均是组件,我们将组件分为四个部分:
bash <(curl -L https://raw.githubusercontent.com/gotomicro/egoctl/main/getlatest.sh)
通过以上脚本,可以下载protoc工具全家桶,以及ego的protoc插件和egoctl
组件名称.Load("配置名称").Build()
,可以创建一个组件实例。如以下http server
,egin
是组件名称,server.http
是配置名称egin.Load("server.http").Build()
debug
配置和命令行的export EGO_DEBUG=true
,并且使用Goland
同学,可以直接通过行号点击到对应的代码路径(gRPC、HTTP客户端支持行号)
链路 使用opentelemetry协议,自动将链路加入到日志里,支持oltp协议上报到阿里arms。
gRPC链路
HTTP链路
阿里arms链路 自动记录各个组件的span信息
统一的监控信息
配置
[server.http]
port = 9001
host = "0.0.0.0"
代码
package main
import (
"github.com/gin-gonic/gin"
"github.com/gotomicro/ego"
"github.com/gotomicro/ego/core/elog"
"github.com/gotomicro/ego/server"
"github.com/gotomicro/ego/server/egin"
)
// export EGO_DEBUG=true && go run main.go --config=config.toml
func main() {
if err := ego.New().Serve(func() *egin.Component {
server := egin.Load("server.http").Build()
server.GET("/hello", func(ctx *gin.Context) {
ctx.JSON(200, "Hello EGO")
return
})
return server
}()).Run(); err != nil {
elog.Panic("startup", elog.FieldErr(err))
}
}
export EGO_DEBUG=true # 默认日志输出到logs目录,开启dev后日志输出到终端
go run main.go --config=config.toml
这个时候我们可以发送一个指令,得到如下结果
➜ helloworld git:(master) ✗ curl http://127.0.0.1:9001/hello
"Hello Ego"%
使用scripts文件夹里的包编译,可以看到优雅的version提示
加入我们,请在验证信息里添加ego
关键字
Thanks for these wonderful people: