golang API与微服务快速开发框架插件库go-eagle的使用
Golang API与微服务快速开发框架插件库go-eagle的使用
🦅 Eagle框架简介
Eagle是一个适用于快速业务开发的Go框架,可以快速构建API服务或网站。它集成了多种常用组件和工具,提供了完整的微服务开发解决方案。
主要特性
- API框架: gin
- RPC框架: gRPC
- 配置管理: viper
- 日志组件: zap
- 数据库ORM: gorm | MongoDB
- 搜索组件: Elasticsearch
- 缓存组件: go-redis, ristretto
- 消息队列: Rabbitmq | redis
- 认证: JWT
- 参数验证: validator
- 定时任务: cron
- 指标监控: prometheus, grafana
- 分布式追踪: opentelemetry
- 服务注册与发现: etcd | consul | nacos
框架分层架构
Eagle采用经典的分层结构,并使用Wire依赖注入框架来提高模块化并减少组件间的耦合。
目录结构
├── Makefile
├── api
├── cmd
├── config
├── docs
├── internal
│ ├── cache
│ ├── handler
│ ├── middleware
│ ├── model
│ ├── dao
│ ├── ecode
│ ├── routers
│ ├── server
│ └── service
├── logs
├── main.go
├── pkg
├── test
└── scripts
安装CLI工具
GOPROXY="https://goproxy.cn,direct"
# go >= 1.16
go install github.com/go-eagle/eagle/cmd/eagle@latest
# go < 1.16
go get github.com/go-eagle/eagle/cmd/eagle
快速开始
# 生成一个包含http和gRPC的服务器
eagle new eagle-demo
# 或者
eagle new github.com/foo/eagle-demo
# 安装依赖
go mod tidy
# 运行
make run
完整示例Demo
下面是一个使用Eagle框架创建简单API服务的完整示例:
package main
import (
"github.com/gin-gonic/gin"
"github.com/go-eagle/eagle/pkg/app"
"github.com/go-eagle/eagle/pkg/config"
"github.com/go-eagle/eagle/pkg/log"
)
func main() {
// 初始化配置
config.Init("config", "configs")
// 初始化日志
log.Init()
// 创建Gin引擎
router := gin.Default()
// 注册路由
router.GET("/hello", func(c *gin.Context) {
app.NewResponse().Success(c, gin.H{
"message": "Hello Eagle!",
})
})
// 创建HTTP服务器
httpServer := app.NewServer(
app.WithName("eagle-demo"),
app.WithAddr(":8080"),
app.WithHandler(router),
)
// 启动服务器
if err := httpServer.Run(); err != nil {
log.Fatalf("run http server err: %v", err)
}
}
对应的配置文件 configs/config.yaml
:
app:
name: "eagle-demo"
env: "dev"
debug: true
timeout: 60
jwt_secret: "eagle"
jwt_timeout: 86400
http:
addr: ":8080"
timeout: 60
read_timeout: 60
write_timeout: 60
log:
level: "debug"
filename: "app.log"
max_size: 100
max_age: 7
max_backups: 10
compress: false
微服务路线图
贡献指南
如果您有改进建议,请fork仓库并创建pull request。您也可以简单地打开一个带有"enhancement"标签的问题。
- Fork仓库到您的GitHub账户
- 为您的更改创建一个新分支
- 修改代码
- 提交更改并将分支推送到fork的仓库
- 在我们的仓库上打开pull request
更多关于golang API与微服务快速开发框架插件库go-eagle的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang API与微服务快速开发框架插件库go-eagle的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Go-Eagle: Golang API与微服务快速开发框架
Go-Eagle 是一个基于 Golang 的轻量级 API 和微服务快速开发框架,它集成了许多常用的组件和最佳实践,帮助开发者快速构建高性能的 Web 服务和微服务应用。
主要特性
- 快速开发:内置常用组件,减少重复代码
- 模块化设计:易于扩展和维护
- 高性能:基于 Gin 框架,提供出色的性能
- 完整工具链:包含日志、配置、数据库、缓存等常用组件
- 微服务支持:内置服务发现、负载均衡等微服务特性
安装与初始化
go get -u github.com/go-eagle/eagle
基本使用示例
1. 创建简单API服务
package main
import (
"github.com/gin-gonic/gin"
"github.com/go-eagle/eagle/pkg/app"
"github.com/go-eagle/eagle/pkg/errcode"
)
func main() {
// 初始化应用
application := app.NewApp("demo-api")
// 创建Gin引擎
router := gin.Default()
// 添加路由
router.GET("/hello", func(c *gin.Context) {
response := app.NewResponse(c)
response.ToResponse(gin.H{
"message": "Hello, Go-Eagle!",
})
})
// 启动服务
application.Run(router)
}
2. 配置管理
Go-Eagle 使用 Viper 进行配置管理:
package config
import (
"github.com/go-eagle/eagle/pkg/config"
)
type ServerConfig struct {
Port int `mapstructure:"port"`
}
var cfg *ServerConfig
func Init() error {
config.AddConfigPath("./configs")
config.SetConfigName("server")
if err := config.Load(); err != nil {
return err
}
return config.Unmarshal(&cfg)
}
func Get() *ServerConfig {
return cfg
}
3. 数据库集成
package main
import (
"github.com/go-eagle/eagle/pkg/database"
"gorm.io/gorm"
)
type User struct {
gorm.Model
Name string
Email string
}
func main() {
// 初始化数据库
db, err := database.NewMySQL()
if err != nil {
panic(err)
}
// 自动迁移
db.AutoMigrate(&User{})
// 使用示例
user := User{Name: "John", Email: "john@example.com"}
db.Create(&user)
}
4. 日志系统
package main
import (
"github.com/go-eagle/eagle/pkg/log"
)
func main() {
// 初始化日志
log.Init()
// 使用日志
log.Info("This is an info message")
log.Warn("This is a warning message")
log.Error("This is an error message")
}
5. 错误处理
package main
import (
"github.com/gin-gonic/gin"
"github.com/go-eagle/eagle/pkg/app"
"github.com/go-eagle/eagle/pkg/errcode"
)
func getUser(c *gin.Context) {
response := app.NewResponse(c)
// 模拟业务错误
if someErrorCondition {
response.ToErrorResponse(errcode.Unauthorized)
return
}
response.ToResponse(gin.H{
"user": "example",
})
}
微服务支持
1. 服务注册与发现
package main
import (
"github.com/go-eagle/eagle/pkg/registry/etcd"
"github.com/go-eagle/eagle/pkg/transport"
)
func main() {
// 创建etcd注册中心
reg, err := etcd.NewRegistry()
if err != nil {
panic(err)
}
// 创建HTTP服务
httpSrv := transport.NewServer(
transport.Address(":8080"),
)
// 注册服务
if err := reg.Register("demo-service", httpSrv); err != nil {
panic(err)
}
// 启动服务
if err := httpSrv.Start(); err != nil {
panic(err)
}
}
2. 服务调用
package main
import (
"github.com/go-eagle/eagle/pkg/client"
)
func main() {
// 创建服务发现客户端
cli, err := client.NewClient("demo-service")
if err != nil {
panic(err)
}
// 调用服务
resp, err := cli.Get("/hello")
if err != nil {
panic(err)
}
// 处理响应
defer resp.Body.Close()
// ...
}
最佳实践
-
项目结构:
/project /cmd # 主程序入口 /configs # 配置文件 /internal # 内部代码 /handler # 请求处理器 /model # 数据模型 /service # 业务逻辑 /pkg # 可复用的公共代码 /api # API定义
-
中间件使用:
router.Use( middleware.RequestID(), middleware.Logging(), middleware.Recovery(), )
-
API文档: Go-Eagle 支持 Swagger 文档生成,可以使用
swag
工具生成文档。
总结
Go-Eagle 提供了完整的 API 和微服务开发解决方案,通过合理的模块划分和丰富的内置组件,可以显著提高开发效率。它的轻量级设计使得应用保持高性能,同时又不失灵活性。
要了解更多细节,建议查阅官方文档和示例代码,根据实际项目需求选择合适的组件和架构模式。