Search code examples
httpgoresponse

Create http.Response instance with sample body string in golang


I am willing to create a sample http.Response instance in golang with a sample body string.

Problem is, its body property accepts ReadCloser instance. But as its a dummy response instance, I was wondering if there is some trick to set it easily without setting up all that stream read/close parts.


Solution

  • As suggested by Not_a_Golfer and JimB:

    io.ReadCloser is an interface that is satisfied when a struct implements both the Read and the Close functions.

    Fortunately, there is io.NopCloser, which takes a io.Reader and wraps it in the nopCloser struct, which implements both Read and Close. However, its Close function does nothing as implied from the name.

    Here is an example:

    package main
    
    import (
        "bytes"
        "fmt"
        "io"
        "net/http"
    )
    
    func main() {
        t := http.Response{
            Body: io.NopCloser(bytes.NewBufferString("Hello World")),
        }
    
        buff := bytes.NewBuffer(nil)
        t.Write(buff)
    
        fmt.Println(buff)
    }
    

    To play with the code, click here.