【发布时间】:2015-06-14 15:28:27
【问题描述】:
我正在使用 Golang protobuf 包并尝试编写一些测试以确保我的 API 正常工作。
我用生成的.pb.go 文件在服务器端构造一个对象。
然后返回
data, err := proto.Marshal(p)
fmt.Fprint(w, data)
在我的测试中我做了
func TestGetProduct(t *testing.T) {
log.Println("Starting server")
go startAPITestServer()
time.Sleep(0 * time.Second)
log.Println("Server started")
//rq, err := http.NewRequest("GET", "localhost:8181/product/1", nil)
client := &http.Client{}
log.Println("Starting Request")
resp, err := client.Get("http://localhost:8181/product/1")
log.Println("Finished Request")
if err != nil {
t.Log(err)
}
defer resp.Body.Close()
log.Println("Reading Request")
data, err := ioutil.ReadAll(resp.Body)
log.Println("Reading finished")
if err != nil {
t.Log(err)
}
log.Println("HTTP Resp", data)
p := &Product{}
proto.UnmarshalText(string(data), p)
proto.Unmarshal(data, p2)
}
问题在于 HTTP 请求正确并正确显示 []byte,但如果我执行 ioutil.ReadAll,它会将 HTTP 响应解释为字符串并将其转换为 []byte。
例如响应是
[12 3 2 14 41]
然后ioutil.ReadAll 将其解释为字符串而不是[]byte。
【问题讨论】:
-
在您的
log.Println(data)中,如果您希望将字节切片格式化为其他字节切片,则需要进行隐蔽(例如string(data))或使用格式化(例如log.Printf("HTTP Resp: % 02X", data)或@ 987654333@也许)。 -
@DaveC 问题不在于它通过 HTTP 发送 []byte 数据的日志,接收此 []byte 数据并将其编码回正确的 []byte 数据
标签: go protocol-buffers