pointers - 为什么请求是一个指针变量?为什么不是引用变量?

标签 pointers go reference

我已经学习 GO Lang 一个月了。我用 Java 编写代码已经 4 年多了。在 java 中,Request 和 Response 都是对象引用。但是,对于 GoLang,Response 是一个对象引用,而 Request 是一个指针引用。

引用和指针一样,是一个可以用来间接引用另一个对象的对象。引用声明与指针声明具有本质上相同的句法结构。

func hello(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "Hello world!")
}

除了可读性和语法糖之外,使用 Request 作为指针变量还有其他意图。

除了上面的问题,这里的请求是一个任意指针。即请求尚不存在,但指针已经指向内存位置。如果我的理解有误,请指出。

最佳答案

重复 In Go HTTP handlers, why is the ResponseWriter a value but the Request a pointer?

主要是 ResponseWriter 是一个接口(interface)(你可能想了解更多关于接口(interface)的知识,以防你还没有看过它)。只是补充一下,请求是一个指向结构的指针 - 拥有请求结构的副本是没有意义的(当按值传递时发生),所以它没有作为结构传递(尤其是当你传递它时想想它下游到其他功能,你可以直接将其传递下去)

关于pointers - 为什么请求是一个指针变量?为什么不是引用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44512567/

相关文章:

c++ - 将来自 switch 语句的信息存储到变量中?

c - 我如何更改此代码以在没有 strstr 函数的情况下工作?

c - 更安全的重新分配方式

heroku - 使用本地包在 Heroku 上运行应用程序

c# - 获取 Type 中使用的程序集的路径

关于传递对象的 C++ 约定(指针与引用)

c - 为什么下面的程序输出是 5,而不是 4?谁能解释一下?

c - C 中的结构指针

templates - 我可以在 Golang 的另一个模板中使用模板变量吗?

go - 协议(protocol)错误验证器.proto : File not found