登录
首页 >  Golang >  Go问答

谁可以向 http.ResponseWriter 写数据?

来源:stackoverflow

时间:2024-02-29 18:51:26 190浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《谁可以向 http.ResponseWriter 写数据?》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我无法理解 responsewriter 语法的一部分。

type responsewriter interface {
    header() header
    write([]byte) (int, error)
    writeheader(statuscode int)
}

例如,在 go by example 中提供的示例中,area 方法是由实现 geometry 接口的两个对象实现的。

http.responsewriter 是一个接口,它能够执行 write 等功能。

我编写了以下内容来测试 w responsewriter 的值

func senddata(w http.responsewriter, r *http.request) {
    fmt.println(w)
}

func main() {
    http.handlefunc("/", senddata)
    http.listenandserve(":8081", nil)
}

浏览器返回结果为空

在执行代码的终端中,我获得了以下标准输出:

&{0xc00009ebe0 0xc0000e8100 {} 0x112a550 false false false false 0xc00006c500 {0xc0000d40e0 map[] false false} map[] false 0 -1 0 false false [] 0 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0] [0 0 0] 0xc0000200e0 0}

作为一个接口,它依赖于底层类型来进行实际的写入,但是底层类型是什么以及写入在哪里实现?


解决方案


fmt.Println(w) 不写入 w。它将 w 写入标准输出。由于没有人写入 w,因此一个空的响应文档将被发送回 http 客户端。

要写入 w,请像这样调用它的 write() 方法:

w.write([]byte("hello"))

然后您将看到 hello 响应文档。

请注意,有一个 fmt.Fprintln() 变体,您可以告诉哪里写入。因此,您可以传递 w 作为写入的目的地:

fmt.fprintln(w, "hello")

然后您将看到 hello 响应文档。

要获取实现 http.ResponseWriter 的具体类型,请打印如下类型:

fmt.printf("%t\n", w)

然后您将看到如下输出:

*http.response

因此,传递给您并实现 http.responsewriter 的类型是未导出类型 http.response (更具体地说是指向它的指针)。它未导出,因此您无法“触摸”它,但出于教育目的,它在 net/http/server.go, currently at line #418 中定义。

有关更多选项和更深入的见解,请参阅相关问题:What's the difference between ResponseWriter.Write and io.WriteString?

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>