2017-06-13 67 views
0

我一直在学习GO Lang一个月。我在java中编写了4年多。在Java中,Request和Response都是对象引用。但是,当谈到GoLang时,Response是一个对象引用,Request是一个指针引用。为什么请求是一个指针变量?为什么不是参考变量?

引用,就像一个指针,是一个可以用来间接引用另一个对象的对象。引用声明与指针声明基本上具有相同的语法结构。

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

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

添加到上面的问题,这里的请求是一个任意的指针。即该请求尚不存在,但该指针已经指向一个存储位置。如果我的理解错误,请抛出一些光。

+4

golang中只有指针没有引用。并且所有参数都按值传递。 – zzn

+0

@zzn我并不期待客观的答案。你能否花一些宝贵的时间来阐述一下? – dataEnthusiast

+0

@zzn谢谢,我得到了资源https://kuree.gitbooks.io/the-go-programming-language-report/content/26/text.html – dataEnthusiast

回答

1

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

复制主要ResponseWriter是一个接口(您可能想了解更多关于接口,以防万一你都没有过的话)。只需要添加一下,请求就是一个指向结构体的指针 - 请求结构体的副本没有意义(它是在传递值时发生的),所以它不会作为结构体传递(尤其是当它通过它时想到它)下游到其他功能,你可以直接把它传下去)

+0

开始,了解关于指示器的使用方法。非常感谢您指出正确的来源。 http://www.airs.com/blog/archives/281这个博客让我更有意义。 – dataEnthusiast

+1

“ResponseWriter是一个接口”是一个重要的细节 - 它意味着您作为ResponseWriter收到的东西也是一个pointer_。 – Adrian

相关问题