go-kit 远程通信
编写client transport 代码
package transport
import (
"context"
"encoding/json"
"errors"
"mygin/go_study/go-kit/server/endpoint"
"net/http"
"strconv"
)
func GetUserInfoRequest(_ context.Context, request *http.Request, r interface{}) error {
userRequest := r.(endpoint.UserRequest)
request.URL.Path += "/user/" + strconv.Itoa(userRequest.Uid)
return nil
}
func GetUserInfoResponse(_ context.Context, res *http.Response) (response interface{}, err error) {
if res.StatusCode != 200 {
return nil, errors.New("no data")
}
var userResponse endpoint.UserResponse
err = json.NewDecoder(res.Body).Decode(&userResponse)
return userResponse, err
}
编写client 代码
func main2() {
target, _ := url.Parse("http://localhost:8080")
client := transporthttp.NewClient("GET", target, transport2.GetUserInfoRequest, transport2.GetUserInfoResponse)
getUserInfo := client.Endpoint()
resp, err := getUserInfo(context.Background(), endpoint.UserRequest{Uid: 101})
if err != nil {
panic(err)
}
userResponse := resp.(endpoint.UserResponse)
println(userResponse.Result)
}