package main
import(
httptransport "github.com/go-kit/kit/transport/http""github.com/gorilla/mux""gomicro/Services""net/http")funcmain(){
user := Services.UserService{}
endp := Services.GenUserEnPoint(user)
serverHandler := httptransport.NewServer(endp, Services.DecodeUserRequest, Services.EncodeUserResponse)//使用go kit创建server传入我们之前定义的两个解析函数
r := mux.NewRouter()//使用mux来使服务支持路由//r.Handle(`/user/{uid:\d+}`, serverHandler) //这种写法支持多种请求方法,访问Examp: http://localhost:8080/user/121便可以访问
r.Methods("GET").Path(`/user/{uid:\d+}`).Handler(serverHandler)//这种写法限定了请求只支持GET方法
http.ListenAndServe(":8080", r)}
Decode函数需要重新写了,因为取参的方式变了
funcDecodeUserRequest(c context.Context, r *http.Request)(interface{},error){//这个函数决定了使用哪个request来请求
vars := mux.Vars(r)//通过这个返回一个map,map中存放的是参数key和值,因为我们路由地址是这样的/user/{uid:\d+},索引参数是uid,访问Examp: http://localhost:8080/user/121,所以值为121if uid, ok := vars["uid"]; ok {//
uid,_:= strconv.Atoi(uid)return UserRequest{Uid: uid},nil}returnnil, errors.New("参数错误")}