2017-06-13 68 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

相關問題