如何将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
}
我发现了这个问题,就像这样
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
}