I see now, but if that can be the case, shouldn’t the Body be documented that 
the Reader may be a ReaderWithLen, and the consumer is free to type check/cast? 
If not, you are using internal details that you should not be.

This is a problem with Go in general. Because the returned object “implements” 
some interface because it happens to have the required method, doesn’t mean it 
was designed to be used that way, or that it has the required semantics - 
unless documented to have them. 

> On Feb 6, 2019, at 2:22 AM, Matteo Biagetti <matteo.biage...@gmail.com> wrote:
> 
> Make sense, thanks for explanation
> 
> 
> 
> Il giorno mercoledì 6 febbraio 2019 07:28:54 UTC+1, Burak Serdar ha scritto:
>> 
>> On Tue, Feb 5, 2019 at 8:13 PM robert engels <ren...@ix.netcom.com> wrote: 
>> > 
>> > That’s what I was trying to point out. Your design is not correct. The 
>> > Body is a Reader, not a Buffer - the length of the request/body may be 
>> > indeterminate - that is, a stream. Attempting to get the length of an 
>> > underlying buffer is not only probably not possible, but not correct in 
>> > many situations. 
>> 
>> The length of the body *may* be indeterminate, and if that's the case, 
>> the underlying Reader will not have a Len method. The design is to 
>> handle the case where the underlying Reader is a Buffer with a Len 
>> method. If the Reader has Len, then the NopCloser derived from that 
>> will also have a Len, and NewRequest can set the content length. If 
>> the Reader does not have Len, then the content length is unknown. 
>> 
>> > 
>> > There is a reason the Body is a ReaderCloser and not a buffer. It is part 
>> > of the http specification. 
>> > 
>> > On Feb 5, 2019, at 9:00 PM, Burak Serdar <bse...@ieee.org> wrote: 
>> > 
>> > On Tue, Feb 5, 2019 at 7:00 PM Robert Engels <ren...@ix.netcom.com> wrote: 
>> > 
>> > 
>> > Shouldn’t you just be taking the content length from the header if 
>> > forwarding the same body. There is no need for the length of the body. 
>> > 
>> > 
>> > True. What I was suggesting is a fix for the general case. 
>> > 
>> > 
>> > On Feb 5, 2019, at 6:53 PM, Burak Serdar <bse...@ieee.org> wrote: 
>> > 
>> > On Tue, Feb 5, 2019 at 5:18 PM Dan Kortschak <d...@kortschak.io> wrote: 
>> > 
>> > Personally, I think this is a bug in the behaviour of NewRequest. See h 
>> > ttps://github.com/golang/go/issues/18117 for some additional context. 
>> > 
>> > 
>> > Agreed. One solution could be to have: 
>> > 
>> > type HasLen interface { 
>> >  int Len() 
>> > } 
>> > 
>> > Then have NopCloser return a nopCloser with len if the underlying 
>> > implementation has len, with the obvious changes to NewRequest.Ugly, 
>> > but can be done without API changes. 
>> > 
>> > 
>> > 
>> > 
>> > On Tue, 2019-02-05 at 05:18 -0800, matteo....@gmail.com wrote: 
>> > I've the following situation: 
>> > I proxy a request to another server and when I made a POST and create 
>> > a new 
>> > request, the contentLength is zero: 
>> > 
>> >       req2, _ := http.NewRequest(req.Method, newApiUrl , req.Body) 
>> >       fmt.Println("New request from body:", req2.ContentLength) // 
>> > print 0 
>> > 
>> > Checking in the source code of the NewRequest func Body don't respect 
>> > some 
>> > interface and populate the ContentLength field. 
>> > 
>> > Could be a bug? Which could be a valid approach in order to create a 
>> > new 
>> > request from an existing one and correct set the Body length? 
>> > 
>> > A working example here: 
>> > 
>> > https://play.golang.org/p/SvCDLj0NrXb 
>> > 
>> > Thanks! 
>> > 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google Groups 
>> > "golang-nuts" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send an 
>> > email to golang-nuts...@googlegroups.com. 
>> > For more options, visit https://groups.google.com/d/optout. 
>> > 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google Groups 
>> > "golang-nuts" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send an 
>> > email to golang-nuts...@googlegroups.com. 
>> > For more options, visit https://groups.google.com/d/optout. 
>> > 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google Groups 
>> > "golang-nuts" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send an 
>> > email to golang-nuts...@googlegroups.com. 
>> > For more options, visit https://groups.google.com/d/optout. 
>> > 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google Groups 
>> > "golang-nuts" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send an 
>> > email to golang-nuts...@googlegroups.com. 
>> > For more options, visit https://groups.google.com/d/optout. 
>> > 
>> > 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to