将struct作为http post数据传递

问题描述 投票:-3回答:1

如何将struct传递给post数据,我想将pb对象作为post数据传递,我该怎么办?

func SendVoteRequest(server Server, peer *Peer, req *RequestVoteRequest) *RequestVoteResponse {
    pb := &protobuf.RequestVoteRequest{
        Term:          req.Term,
        LastLogIndex:  req.LastLogIndex,
        LastLogTerm:   req.LastLogTerm,
        CandidateName: req.CandidateName,
    }
    url := fmt.Sprintf("%s%s", peer.ConnectionString, t.RequestVotePath())
    traceln(server.Name(), "POST", url)

    httpResp, err := t.httpClient.Post(url, "application/json", pb) // how to write `pb` to Post method
    if httpResp == nil || err != nil {
        traceln("transporter.rv.response.error:", err)
        return nil
    }
    defer httpResp.Body.Close()



    return nil
}
go
1个回答
0
投票

我发现了这个问题,就像这样

func SendVoteRequest(server Server, peer *Peer, req *RequestVoteRequest) *RequestVoteResponse {
var b bytes.Buffer

pb := &protobuf.RequestVoteRequest{
    Term:          req.Term,
    LastLogIndex:  req.LastLogIndex,
    LastLogTerm:   req.LastLogTerm,
    CandidateName: req.CandidateName,
}

if err := json.NewEncoder(&b).Encode(pb); err != nil {
    panic(err)
}

url := fmt.Sprintf("%s%s", peer.ConnectionString, t.RequestVotePath())
traceln(server.Name(), "POST", url)

httpResp, err := t.httpClient.Post(url, "application/json", &b) // how to write `pb` to Post method
if httpResp == nil || err != nil {
    traceln("transporter.rv.response.error:", err)
    return nil
}
© www.soinside.com 2019 - 2024. All rights reserved.