在golang中使用示例正文字符串创建http.Response实例

Ran*_*ana 18 http response go

我愿意http.Response在golang中创建一个带有示例体字符串的示例实例.

问题是,它的body属性接受ReadCloser实例.但是作为一个虚拟响应实例,我想知道是否有一些技巧可以轻松设置它而无需设置所有流读取/关闭部分.

boa*_*ter 32

正如Not_a_GolferJimB所建议的那样:

io.ReadCloser是一个struct实现函数ReadClose函数时满足的接口.

幸运的是,有ioutil.NopCloser一个io.Reader,它将它包装在nopCloser结构中,它实现了ReadClose.但是,它的Close功能没有像名称所暗示的那样起作用.

这是一个例子:

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    t := http.Response{
        Body: ioutil.NopCloser(bytes.NewBufferString("Hello World")),
    }

    buff := bytes.NewBuffer(nil)
    t.Write(buff)

    fmt.Println(buff)
}
Run Code Online (Sandbox Code Playgroud)

要使用代码,请单击此处.


Dav*_*d G 12

除了最佳答案之外,我发现为了使响应被客户视为真正的文章,需要更充分地形成.对于正常(200)响应,我执行以下操作:

body := "Hello world"
t := &http.Response{
  Status:        "200 OK",
  StatusCode:    200,
  Proto:         "HTTP/1.1",
  ProtoMajor:    1,
  ProtoMinor:    1,
  Body:          ioutil.NopCloser(bytes.NewBufferString(body)),
  ContentLength: int64(len(body)),
  Request:       req,
  Header:        make(http.Header, 0),
}
Run Code Online (Sandbox Code Playgroud)

然后你可以,例如,添加标题(带有401状态代码,请求授权,比方说).reqhttp.Request您为其生成响应的.