



第一步創建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)//判斷響應格式是否正確
}
一般是三層架構三個文件夾,我這里演示方便把三層的東西都放到了一個中