go - Using protobuf with golang and handling []byte HTTP response body -


i using golang protobuf package , try write tests ensure api works properly.

i construct object on server-side generated .pb.go file.

and return with

data, err := proto.marshal(p) fmt.fprint(w, data) 

and in test do

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) } 

the problem http request correct , displays []byte correctly, if ioutil.readall interprets http response string , converts []byte.

for example response

[12 3 2 14 41] 

then ioutil.readall interprets string , not []byte.

the problem was: tried write binary data output stream fmt.fprint missing important fact, fmt package converts (everything?) input "read-able" format (ie strings). correct way of writting data output of http response using responsewriter directly this:

k, err := w.write(data) 

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -