我已经学习 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/