golang基于八卦协议和OpenAPI 3.0的低代码微服务框架插件go-doudou的使用
Golang基于八卦协议和OpenAPI 3.0的低代码微服务框架插件go-doudou的使用
go-doudou简介
go-doudou(发音/dəudəu/)是一个基于OpenAPI 3.0(用于REST)规范和Protobuf v3(用于gRPC)的轻量级微服务框架。它同时支持单体服务应用。
主要特性
- 💡 从Golang接口开始,无需学习新的IDL(接口定义语言)
- 🔩 内置强大的代码生成器CLI,定义接口方法后,只需实现你的想法
- ⚡ 为云原生时代而生,内置CLI可加速产品迭代
- 🔑 内置服务治理支持,包括远程配置管理、客户端负载均衡、限流、熔断、隔离、超时、重试等
- 📦️ 同时支持单体架构和微服务架构,提供系统设计灵活性
快速开始示例
下面是一个使用go-doudou创建简单REST服务的完整示例:
- 首先安装go-doudou CLI工具:
go install github.com/unionj-cloud/go-doudou/v2@latest
- 创建一个新项目:
mkdir myservice
cd myservice
go mod init myservice
- 创建服务接口定义文件
svc.go
:
package myservice
// 用户服务接口定义
type UserService interface {
// GetUser 获取用户信息
// @get /user/{id}
GetUser(id int) (user User, err error)
}
// 用户数据结构
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
- 使用go-doudou生成代码:
go-doudou svc http --handler -c
- 实现接口逻辑,编辑
svcimpl.go
:
package myservice
import "context"
// UserServiceImpl 实现UserService接口
type UserServiceImpl struct {
}
// GetUser 获取用户信息实现
func (u *UserServiceImpl) GetUser(ctx context.Context, id int) (user User, err error) {
// 这里实现你的业务逻辑
return User{
ID: id,
Name: "John Doe",
Age: 30,
}, nil
}
- 启动服务:
go run cmd/myservice/main.go
- 测试API:
curl http://localhost:6060/user/1
性能基准测试
测试环境:
- 机器:MacBook Pro (16-inch, 2019)
- CPU:2.3 GHz 8核 Intel Core i9
- 内存:16 GB 2667 MHz DDR4
- 处理时间:0ms, 10ms, 100ms, 500ms
- 并发:1000
- 持续时间:30s
- go-doudou版本:v1.3.7
社区支持
欢迎通过以下方式联系开发者:
- 邮箱:328454505@qq.com
- 微信:
- 微信群:
- QQ群:
许可证
go-doudou使用MIT许可证
更多关于golang基于八卦协议和OpenAPI 3.0的低代码微服务框架插件go-doudou的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang基于八卦协议和OpenAPI 3.0的低代码微服务框架插件go-doudou的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用go-doudou构建基于八卦协议和OpenAPI 3.0的低代码微服务框架
go-doudou是一个基于Golang的微服务框架,它结合了八卦协议(Gossip Protocol)和OpenAPI 3.0规范,提供了一种低代码开发微服务的方式。下面我将详细介绍如何使用go-doudou框架。
安装go-doudou
首先需要安装go-doudou命令行工具:
go install github.com/unionj-cloud/go-doudou@latest
创建项目
创建一个新的go-doudou项目:
mkdir myservice
cd myservice
go mod init github.com/yourname/myservice
go-doudou svc init
定义服务接口
go-doudou使用Go接口定义服务API。创建一个service.go
文件:
package service
import (
"context"
"github.com/unionj-cloud/go-doudou/v2/toolkit/openapi/v3"
)
type IUserService interface {
// GetUser 获取用户信息
// @get /user/{id}
GetUser(ctx context.Context, id int) (user User, err error)
}
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
生成代码
运行以下命令生成服务代码:
go-doudou svc http --handler -c
这将生成:
- HTTP处理程序
- OpenAPI 3.0规范文档
- 客户端代码
- 服务注册与发现相关代码
实现服务
在serviceimpl.go
中实现接口:
package service
import (
"context"
)
type UserServiceImpl struct {
}
func (u *UserServiceImpl) GetUser(ctx context.Context, id int) (user User, err error) {
// 这里实现业务逻辑
return User{
Id: id,
Name: "John Doe",
Age: 30,
}, nil
}
主程序
在main.go
中启动服务:
package main
import (
"github.com/unionj-cloud/go-doudou/v2/framework/rest"
"myservice/config"
"myservice/service"
"myservice/transport/httpsrv"
)
func main() {
conf := config.LoadFromEnv()
svc := service.NewUserServiceImpl()
handler := httpsrv.NewUserHandler(svc)
srv := rest.NewRestServer()
srv.AddRoute(httpsrv.Routes(handler)...)
srv.Run()
}
八卦协议集成
go-doudou内置了基于八卦协议的服务发现机制。要启用它:
func main() {
conf := config.LoadFromEnv()
// 初始化八卦协议成员列表
memberlist := gossip.NewMemberlist(conf.GossipConfig)
defer memberlist.Shutdown()
// 注册服务
registry := consul.NewConsulRegistry(conf.ConsulConfig)
registry.Register(®istry.ServiceInstance{
ID: uuid.NewString(),
Name: "user-service",
Address: conf.Server.Host,
Port: conf.Server.Port,
})
// 其余代码...
}
OpenAPI 3.0文档
go-doudou会自动生成OpenAPI 3.0规范的API文档。访问:
http://localhost:6060/swagger/index.html
客户端调用
go-doudou生成的客户端代码可以这样使用:
package main
import (
"context"
"myservice/client"
"myservice/dto"
)
func main() {
cli := client.NewUserClient("http://localhost:6060")
user, err := cli.GetUser(context.Background(), 1)
if err != nil {
panic(err)
}
println(user.Name)
}
配置管理
go-doudou支持从环境变量或配置文件加载配置:
type Config struct {
Server struct {
Host string `env:"SERVER_HOST" default:"0.0.0.0"`
Port int `env:"SERVER_PORT" default:"6060"`
}
Consul struct {
Address string `env:"CONSUL_ADDRESS" default:"127.0.0.1:8500"`
}
}
优势总结
- 低代码开发:通过接口定义自动生成大量代码
- 内置服务发现:基于八卦协议实现高效服务发现
- 标准API文档:自动生成OpenAPI 3.0规范文档
- 微服务友好:内置负载均衡、熔断器等微服务模式
- 可扩展性:支持中间件和插件机制
go-doudou通过结合八卦协议和OpenAPI 3.0,为Golang微服务开发提供了一种高效、规范的解决方案,特别适合需要快速开发标准化微服务的场景。