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

我愿意http.Response用一个示例正文字符串在 golang 中创建一个示例实例。

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


哈士奇WWW
浏览 306回答 3
3回答

慕姐4208626

正如Not_a_Golfer和JimB所建议的:io.ReadCloser是一个接口,当 astruct实现Read和Close函数时满足。幸运的是,有ioutil.NopCloser,它接受 aio.Reader并将其包装在nopCloser结构中,该结构同时实现Read和Close。然而,它的Close功能并没有从名字中暗示出来。下面是一个例子:package mainimport (    "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)}

当年话下

除了最上面的答案,我发现为了让客户将响应视为真品,它需要更完整地形成。对于正常 (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),}然后你可以,例如,添加标题(带有 401 状态代码,请求授权,比如说)。req是http.Request您为其生成响应的 。

吃鸡游戏

这应该工作..func main(){&nbsp; &nbsp; go serveHTTP(*port, *host)&nbsp; &nbsp; select {}}func serveHTTP(port int, host string) {&nbsp; &nbsp; mux := http.NewServeMux()&nbsp; &nbsp; mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {&nbsp; &nbsp; &nbsp; &nbsp; requestHandler(w, r)&nbsp; &nbsp; })&nbsp; &nbsp; addr := fmt.Sprintf("%v:%d", host, port)&nbsp; &nbsp; server := &http.Server {&nbsp; &nbsp; &nbsp; &nbsp; Addr:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addr,&nbsp; &nbsp; &nbsp; &nbsp; Handler:&nbsp; &nbsp; &nbsp; &nbsp; mux,&nbsp; &nbsp; &nbsp; &nbsp; ReadTimeout:&nbsp; &nbsp; 10 * time.Second,&nbsp; &nbsp; &nbsp; &nbsp; WriteTimeout:&nbsp; &nbsp;10 * time.Second,&nbsp; &nbsp; &nbsp; &nbsp; MaxHeaderBytes: 1 << 20,&nbsp; &nbsp; }&nbsp; &nbsp; err := server.ListenAndServe()&nbsp; &nbsp; log.Println(err.Error())}func requestHandler(w http.ResponseWriter, r *http.Request){&nbsp; fmt.Fprintf(w, `Success!`)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go