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)的轻量级微服务框架。它同时支持单体服务应用。

go-doudou logo

主要特性

  • 💡 从Golang接口开始,无需学习新的IDL(接口定义语言)
  • 🔩 内置强大的代码生成器CLI,定义接口方法后,只需实现你的想法
  • ⚡ 为云原生时代而生,内置CLI可加速产品迭代
  • 🔑 内置服务治理支持,包括远程配置管理、客户端负载均衡、限流、熔断、隔离、超时、重试等
  • 📦️ 同时支持单体架构和微服务架构,提供系统设计灵活性

快速开始示例

下面是一个使用go-doudou创建简单REST服务的完整示例:

  1. 首先安装go-doudou CLI工具:
go install github.com/unionj-cloud/go-doudou/v2@latest
  1. 创建一个新项目:
mkdir myservice
cd myservice
go mod init myservice
  1. 创建服务接口定义文件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"`
}
  1. 使用go-doudou生成代码:
go-doudou svc http --handler -c
  1. 实现接口逻辑,编辑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
}
  1. 启动服务:
go run cmd/myservice/main.go
  1. 测试API:
curl http://localhost:6060/user/1

性能基准测试

benchmark

测试环境:

  • 机器: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
  • 微信: wechat qrcode
  • 微信群: wechat group
  • QQ群: qq group

许可证

go-doudou使用MIT许可证


更多关于golang基于八卦协议和OpenAPI 3.0的低代码微服务框架插件go-doudou的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于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(&registry.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"`
	}
}

优势总结

  1. 低代码开发:通过接口定义自动生成大量代码
  2. 内置服务发现:基于八卦协议实现高效服务发现
  3. 标准API文档:自动生成OpenAPI 3.0规范文档
  4. 微服务友好:内置负载均衡、熔断器等微服务模式
  5. 可扩展性:支持中间件和插件机制

go-doudou通过结合八卦协议和OpenAPI 3.0,为Golang微服务开发提供了一种高效、规范的解决方案,特别适合需要快速开发标准化微服务的场景。

回到顶部