9
假設我有一箇中心方法,它向http.ResponseWriter添加一個特定的頭文件。我不想使用HandleFunc包裝。通過值或引用傳遞http.ResponseWriter?
我想知道,我是否會通過引用發送ResponseWriter。那麼,什麼是正確的:
addHeaders(&w)
或
addHeaders(w)
問不同:
func addHeaders(w *http.ResponseWriter) {...}
或
func addHeaders(w http.ResponseWriter) {...}
從我的理解,我想說的第一版本會是正確的,因爲我不'不想創建ResponseWriter的副本。但我還沒有看到任何代碼,其中ResponseWriter通過引用傳遞,並想知道爲什麼。
謝謝!
只要說清楚:Go中沒有「引用」的傳遞。 Go完全沒有「通過參考」的概念。所有人都可以做的就是按價值傳遞一個指針。 (幾乎)接口的所有用途都不會使用指向接口的指針。 – Volker
注意「-er」類型名稱(Reader(At),Writer,Stringer,Locker)或描述抽象概念的類型名稱(crypto.Hash)通常是接口和參考,以幫助在將來發現這一點。當然,文檔有最後一個字。 – twotwotwo