go-kit 简单例子说明

本文提供了一个go-kit的简单应用实例,包括Service、Endpoint和Transport的讲解。Service层包含核心业务代码,Endpoint作为go-kit的抽象层封装服务,Transport如HTTP则用于对外暴露服务。通过main.go文件初始化并运行服务。此外,go-kit还支持中间件、日志跟踪和服务发现等功能。
摘要由CSDN通过智能技术生成

最简单的例子

概述

个人觉得其实可以大概看一下文档就跳过官方的stringsvc例子了,实际实操可以从addsvc开始。

addsvc的pkg分层如下

|- addendpoint
	|- middleware.go
	|- set.go
|- addservice
	|- middleware.go
	|- service.go
|- addtransport
	|- grpc.go
	|- http.go
	|- jsonrpc.go
	|- thrift.go

因此可看出,项目结构分层是:service -> endpoint -> transport(各种传输协议)

Service

这里是存放主要的核心业务代码,可以独立于任何框架使用。

package addservice
import (
	"context"
	
	"github.com/go-kit/kit/log"
)
// 1. 定义一个service的interface规范
type AddService interface {
   
	Sum(ctx context.Context, a, b int) (int, error)
}

// 2. 定义一个service class
type basicService struct{
   }

func NewBasicService() AddService {
   
	return basicService{
   }
}

const (
	intMax = 1<<31 - 1
	intMin = -(intMax + 1)
	maxLen = 10
)

func (s basicService) Sum(_ context.Context, a, b int) (int, error) {
   
	if a == 0 && b == 0 {
   
		return 0, ErrTwoZeroes
	}
	if (b > 0 && a > (intMax-b)) || (b < 0 && a < (intMin-b)) {
   
		return 0, ErrIntOverflow
	}
	return a + b, nil
}

// 3. 构造service类对象
func New(logger log.Logger, ints, chars metrics.Counter) AddService {
   
	var svc AddService
	{
   
		// 4. 可以在这里加入需要的midllewares
		svc = NewBasicService()
	}
	return svc
}

Endpoint

endpoint是一个go-kit的抽象类,作用是将service封装一层,使其更好地适配go-kit的其他功能,本质上就是封装一下输入输出,提供一个RPC服务

核心代码如下:

package addendpoint
import (
	"context"
	"time"
	
	"github.com/go-kit/kit/endpoint"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值