1.基礎入門


第一步創建UserService

package Services

type IUserService interface {
    GetName(userid int) string
}

type UserService struct{}

func (this UserService) GetName(userid int) string {
    if userid == 101 {
        return "jerry"
    }
    return "guest"
}

第二部:創建UserEndPoint

package Services

import (
    "context"
    "github.com/go-kit/kit/endpoint"
)

type UserRequest struct { //封裝User請求結構體
    Uid int `json:"uid"`
}

type UserResponse struct {
    Result string `json:"result"`
}

func GenUserEnPoint(userService IUserService) endpoint.Endpoint {
    return func(ctx context.Context, request interface{}) (response interface{}, err error) {
        r := request.(UserRequest)           //通過類型斷言獲取請求結構體
        result := userService.GetName(r.Uid) //
        return UserResponse{Result: result}, nil
    }
}

第三部:創建Transport

創建UserTransport

package Services

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

func DecodeUserRequest(c context.Context, r *http.Request) (interface{}, error) { //這個函數決定了使用哪個request結構體來請求
    if r.URL.Query().Get("uid") != "" {
        uid, _ := strconv.Atoi(r.URL.Query().Get("uid"))
        return UserRequest{Uid: uid}, nil
    }
    return nil,errors.New("參數錯誤")/
}

func EncodeUserResponse(ctx context.Context,w http.ResponseWriter,response interface{}) error{
    w.Header().Set("Content-type","application/json") //設置響應格式為json,這樣客戶端接收到的值就是json,就是把我們設置的UserResponse給json化了

    return json.NewEncoder(w).Encode(response)//判斷響應格式是否正確
}

一般是三層架構三個文件夾,我這里演示方便把三層的東西都放到了一個中






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM