zoukankan      html  css  js  c++  java
  • 3.让我们的服务支持外部路由

    package main
    
    import (
        httptransport "github.com/go-kit/kit/transport/http"
        "github.com/gorilla/mux"
        "gomicro/Services"
        "net/http"
    )
    
    func main() {
        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函数需要重新写了,因为取参的方式变了

    func DecodeUserRequest(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,所以值为121
        if uid, ok := vars["uid"]; ok { //
            uid, _ := strconv.Atoi(uid)
            return UserRequest{Uid: uid}, nil
        }
        return nil, errors.New("参数错误")
    }
    




  • 相关阅读:
    GDI+中发生一般性错误
    反复
    一些网址
    控制listview大图标之间的间距
    android 系统移植
    android 启动报错
    android init.rc 语法分析
    Linux下的管道编程技术dup函数和dup2函数
    为了防止打开的设备 被占用
    android 多媒体框架
  • 原文地址:https://www.cnblogs.com/hualou/p/12076391.html
Copyright © 2011-2022 走看看