go kit (3)

123 阅读1分钟

本文已参加「新人创作礼」活动,一起开启掘金创作之路。

我们进今天开始,构建项目

一:我们先将项目的初始架构,搞起来 在这里插入图片描述 如上图所示,先创建一些空的go文件,文件名可以随便起,但是文件夹的名字最好先用这么写,因为一开始自己对kit的不是完全理解,包名在此还有一定的提示作用

二: 我们先从最基本的service开始构建

codeService.go

import "fmt"

type User struct {
}

func (u *User) GetUserName(uid int) string {

	fmt.Println("接收到前端传来的参数:",uid)

	return "hello git"

}

先来一个最简单的

三:在完善endpoint层

import (
	"context"
	"errors"
	"github.com/go-kit/kit/endpoint"
	myMux "github.com/gorilla/mux"
	"goKit/service"
	"net/http"
)

func GenVcEndpoint() endpoint.Endpoint {
	return func(ctx context.Context, request interface{}) (response interface{}, err error){
		r := request.(*http.Request)
		vars := myMux.Vars(r)
		if uid, ok := vars["uid"]; ok {
			user := service.User{}
			return user.GetUserName(uid),nil
		}
		return nil,errors.New("出错了")

	}
}

注意:我们在此使用的是gorilla/mux 作为路由

四:我们继续,完善transport层

import (
	"context"
	"encoding/json"
	"net/http"
)

func DecodeVcRequest(_ context.Context, r *http.Request) (interface{}, error) {
	return r, nil
}

func EncodeVcResponse(_ context.Context, w http.ResponseWriter, response interface{}) error {
	return json.NewEncoder(w).Encode(response)
}

注:在此,我们是用最简单明了的方式,定义入参解析以及出参定义 - 就是什么也不操作,但是kit框架需要

五:那现在,我们在main函数中,将服务启动起来

import (
	goKitHttp "github.com/go-kit/kit/transport/http"
	"github.com/gorilla/mux"
	. "goKit/endpoint"
	. "goKit/transport"
	"net/http"
	"os"
)

func main() {

	r := mux.NewRouter()

	getCode := goKitHttp.NewServer(GenVcEndpoint(),
		DecodeVcRequest, EncodeVcResponse,)
	r.Methods("Get").Path(`/getName/{uid:\d+}`).Handler(getCode)

	 err :=http.ListenAndServe(":9090", r)
	 if err != nil{
	 	os.Exit(-1)
	 }

}
注:最简单直接的配置,将服务启动

六: 测试 浏览器请求,以及返回值

在这里插入图片描述

后台输出: 在这里插入图片描述 七:到此,我们kit的基础架构就完成了,剩下的就是一点点的去继续完善了