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依赖注入框架来提高模块化并减少组件间的耦合。

eagle-framework-diagram

目录结构

├── 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

微服务路线图

Microservice-roadmap

贡献指南

如果您有改进建议,请fork仓库并创建pull request。您也可以简单地打开一个带有"enhancement"标签的问题。

  1. Fork仓库到您的GitHub账户
  2. 为您的更改创建一个新分支
  3. 修改代码
  4. 提交更改并将分支推送到fork的仓库
  5. 在我们的仓库上打开pull request

更多关于golang API与微服务快速开发框架插件库go-eagle的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang API与微服务快速开发框架插件库go-eagle的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Go-Eagle: Golang API与微服务快速开发框架

Go-Eagle 是一个基于 Golang 的轻量级 API 和微服务快速开发框架,它集成了许多常用的组件和最佳实践,帮助开发者快速构建高性能的 Web 服务和微服务应用。

主要特性

  1. 快速开发:内置常用组件,减少重复代码
  2. 模块化设计:易于扩展和维护
  3. 高性能:基于 Gin 框架,提供出色的性能
  4. 完整工具链:包含日志、配置、数据库、缓存等常用组件
  5. 微服务支持:内置服务发现、负载均衡等微服务特性

安装与初始化

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()
	// ...
}

最佳实践

  1. 项目结构

    /project
      /cmd          # 主程序入口
      /configs      # 配置文件
      /internal     # 内部代码
        /handler    # 请求处理器
        /model      # 数据模型
        /service    # 业务逻辑
      /pkg         # 可复用的公共代码
      /api          # API定义
    
  2. 中间件使用

    router.Use(
        middleware.RequestID(),
        middleware.Logging(),
        middleware.Recovery(),
    )
    
  3. API文档: Go-Eagle 支持 Swagger 文档生成,可以使用 swag 工具生成文档。

总结

Go-Eagle 提供了完整的 API 和微服务开发解决方案,通过合理的模块划分和丰富的内置组件,可以显著提高开发效率。它的轻量级设计使得应用保持高性能,同时又不失灵活性。

要了解更多细节,建议查阅官方文档和示例代码,根据实际项目需求选择合适的组件和架构模式。

回到顶部