当前位置: 首页 > 软件库 > 程序开发 > 微服务框架 >

ego-go

简单的 Go 微服务框架
授权协议 MIT
开发语言 Google Go
所属分类 程序开发、 微服务框架
软件类型 开源软件
地区 国产
投 递 者 端木朝
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

EGO是一个集成里各种工程实践的框架。通过组件化的设计模式,保证了业务方能够统一的调用方式启动各种组件

使用EGO的优势

  • 配置化驱动组件
  • 屏蔽底层组件启动细节
  • 微服务组件的可观测、可治理
  • 可插拔的Ego-Component组件
  • Fail Fast理念和错误友好提示

2.1 提升组件熟练度

我们工程师要想提升组件熟练度,首先要大量看开源组件文档和代码,然后坚持长时间使用,才能形成肌肉记忆,提升我们做业务的速度。而这一切所投入的时间和精力是非常大的。

要减少这个投入成本,让更多开发者使用好优秀的开源组件,EGO的做法是标准化所有开源组件,对其做一层封装,统一各种行为。

  • 统一组件文件名
  • 统一组件配置参数
  • 统一组件调用API
  • 统一组件错误行为
  • 统一组件监控行为

让人掌握了一种组件,就可以举一反三使用其他组件。

2.2 提升故障排查效率

  • 统一错误码
  • 组件错误、慢响应、链路、常规请求拦截器埋点(服务端、客户端均会拦截)
  • 收敛错误字段
  • 注入组件关键信息:代码行号、配置名、目标地址、耗时、请求数据、响应数据
  • 调试阶段,错误高亮、格式化友好提示
  • 调试阶段,组件内置debug拦截器

2.3 自动生成重复代码

  • 生成代码,配置、数据解析、模版分离
  • 不依赖于语言,构建项目代码
  • 利用Go1.16特性embed,启动web,生成代码
  • 项目地址: https://github.com/gotomicro/egoctl

3 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  

4 EGO的定义

4.1 框架分层

我们框架分为三个层次

  • 核心层提供配置、日志、监控和链路,是其他组件的基石
  • 组件层提供客户端、服务端、任务端里的各种组件
  • 胶水层控制了各种组件的生命周期,错误处理

4.2 架构图

4.3 生命周期

4.4 组件分层

我们认为一切均是组件,我们将组件分为四个部分:

  • Container 处理组件类型、组件配置、组件启动
  • Config 配置参数
  • Component 组件的调用方法
  • Options 配置和组件可选项

5 版本要求

  • v0.8.2以下 需要 go大于go1.13
  • v0.8.3后 需要 go大于go1.16
  • v1.0.0后 需要 go大于go1.17

6 下载工具

bash <(curl -L https://raw.githubusercontent.com/gotomicro/egoctl/main/getlatest.sh)

通过以上脚本,可以下载protoc工具全家桶,以及ego的protoc插件和egoctl

  • /usr/local/bin/egoctl EGO工具
  • /usr/local/bin/protoc 生成Pb工具
  • /usr/local/bin/protoc-gen-go 生成Pb工具
  • /usr/local/bin/protoc-gen-go-grpc 生成gRPC工具
  • /usr/local/bin/protoc-gen-go-errors 生成错误码工具
  • /usr/local/bin/protoc-gen-openapiv2 生成HTTP工具
  • /usr/local/bin/protoc-gen-go-http 生成HTTP工具

7 特性介绍

  • 配置驱动 所有组件启动方式为组件名称.Load("配置名称").Build(),可以创建一个组件实例。如以下http serveregin是组件名称,server.http是配置名称
egin.Load("server.http").Build()
  • 友好的debug 通过开启debug配置和命令行的export EGO_DEBUG=true, 我们可以在测试环境里看到所有组件的请求里的行号、配置名、请求地址、耗时、请求数据、响应数据

   

并且使用Goland同学,可以直接通过行号点击到对应的代码路径(gRPC、HTTP客户端支持行号)

8 Quick Start

8.1 HelloWorld

配置

[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))
   }
}

8.2 使用命令行运行

export EGO_DEBUG=true # 默认日志输出到logs目录,开启dev后日志输出到终端
go run main.go --config=config.toml

8.3 如下所示

图片

这个时候我们可以发送一个指令,得到如下结果

➜  helloworld git:(master) ✗ curl http://127.0.0.1:9001/hello
"Hello Ego"%  

8.4 更加友好的包编译

使用scripts文件夹里的包编译,可以看到优雅的version提示

9 更新日志

Releases

Contributors

Thanks for these wonderful people:


askuy

Wei Zheng

shaoyuan

Panda

刘文哲

zhangjunjun

devincd

Ming Deng

Angelia

Wbofeng

clannadxr

Link Duan

Costa

MEX7

LincolnZhou
  • 1  go grpc-go 相关技术专栏 总入口 2  Protobuf介绍与实战 图文专栏 文章目录 目前,不在亲自开发新的插件了; 我在https://github.com/gotomicro/ego框架里抽取了三个prototobuf插件用例, 进行了整理; 源码已经上传到百度网盘了。 链接: https://pan.baidu.com/s/1RNDYSmX38xFc_O7iDeGdcw 提

  • 作为开发人员,没有学习精神就意味着会被淘汰。没有学习的利器也很难做到真正去学习。 前段时间辞职后,自学了红帽的初中级的linux,还没去考证!然后发现我学完后没有太多实操依旧是忘的快,昨天排查下nginx的问题,感觉都生疏了! C#还在坚持,以前觉得WPF好low,在找工作过程中,主要是面试的大部分是医疗结构,是BS,需要窗体开发。然后才意识到WPF也是很厉害的。为此我还特意买了朝夕教育的SVIP

  • 1  go grpc-go 相关技术专栏 总入口 2  Protobuf介绍与实战 图文专栏 文章目录 1、protoc-gen-go-errors插件源码下载 此插件是从https://github.com/gotomicro/ego框架里抽取了的prototobuf插件用例; 源码已经上传到百度网盘了。 链接: https://pan.baidu.com/s/1RNDYSmX38xFc_O7i

  • docker中使用nats服务 以json格式发送消息 import ( "encoding/json" "fmt" "github.com/nats-io/nats.go" "robot-pcshare/model" ) var natsConn *nats.Conn type MsgData struct { FileData []byte `json:"file_data"

 相关资料
  • 前面小节已经介绍了Web是基于http协议的一个服务,Go语言里面提供了一个完善的net/http包,通过http包可以很方便的就搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由,静态文件,模版,cookie等数据进行设置和操作。 http包建立Web服务器 package main import ( "fmt" "net/http" "strin

  • 本文向大家介绍go语言实现简单http服务的方法,包括了go语言实现简单http服务的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言实现简单http服务的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Go语言程序设计有所帮助。

  • 本文向大家介绍Go语言实现简单Web服务器的方法,包括了Go语言实现简单Web服务器的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言实现简单Web服务器的方法。分享给大家供大家参考。具体分析如下: 包 http 通过任何实现了 http.Handler 的值来响应 HTTP 请求: package http type Handler interface { ServeHTTP

  • 本文向大家介绍Go语言实现的一个简单Web服务器,包括了Go语言实现的一个简单Web服务器的使用技巧和注意事项,需要的朋友参考一下 Web是基于http协议的一个服务,Go语言里面提供了一个完善的net/http包,通过http包可以很方便的就搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由,静态文件,模版,cookie等数据进行设置和操作。 http包建立Web服务器 上

  • 问题内容: 我想用Go实现一个webdav服务器,并在这里找到一个新的“ x”包: 但是我不知道如何使用这个包来完成它。有人可以帮我解决这个问题吗? 我尝试了这个: 如果我尝试连接到服务器,则会收到内部服务器错误。 我究竟做错了什么? 谢谢你的帮助。 问题答案: x / net / webdav仍处于开发的早期阶段。许多关键部分仍在实施中,目前无法使用。看一下源代码,仍然有一半以上的必要结构和功能

  • 主要内容:Go语言工程结构简单,Go语言编译速度快Go语言语法简单易懂,学习曲线平缓,不需要像 C/ C++ 语言动辄需要两到三年的学习期。Go语言被称为“互联网时代的C语言”。互联网的短、频、快特性在Go语言中体现得淋漓尽致。一个熟练的开发者只需要短短的一周时间就可以从学习阶段转到开发阶段,并完成一个高并发的服务器开发。 Go语言是 Google 公司开发的一种静态型、编译型并自带垃圾回收和并发的编程语言。所以它是一门类型安全的语言,加上通过构