第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

什么時(shí)候指針是慣用的?

什么時(shí)候指針是慣用的?

Go
紅顏莎娜 2021-12-07 16:01:24
我來(lái)自沒(méi)有明確指針的語(yǔ)言,所以我真的不明白它們存在的意義(沒(méi)有雙關(guān)語(yǔ))。問(wèn)題是,大多數(shù)時(shí)候我不知道為什么要傳遞指向函數(shù)的指針。我確實(shí)明白,當(dāng)你傳入一個(gè)指針時(shí),對(duì)變量的修改是對(duì)所有地方的值進(jìn)行的,但有什么意義呢?為什么不直接修改值并返回結(jié)果呢?例如,http.HandlerFunc是一個(gè)接收http.ResponseWriter和*http.Request作為參數(shù)的函數(shù)。我已經(jīng)讀過(guò)接口實(shí)際上是指針(對(duì)嗎?),但我沒(méi)有得到的是,為什么?為什么我得到一個(gè)指向作者的指針?我沒(méi)有修改它,我只是寫(xiě)信給它。而且,為什么我會(huì)得到一個(gè)指向請(qǐng)求的指針?我正在做類(lèi)似的事情request.FormValue()。通過(guò)這些例子,我在這里試圖確定的是“我什么時(shí)候需要傳入一個(gè)指針?”這個(gè)問(wèn)題的答案。我現(xiàn)在這樣做的方法是編寫(xiě)我的代碼,嘗試編譯它,修復(fù)說(shuō)我必須通過(guò)添加和號(hào)和星號(hào)傳遞指針的錯(cuò)誤,直到錯(cuò)誤通過(guò)。然而,我覺(jué)得這種對(duì)指針的半理解概念很快就會(huì)在某一天咬我。
查看完整描述

3 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊

顧名思義,指針是指向內(nèi)存中某個(gè)位置的變量。

您在復(fù)制對(duì)象的整個(gè)值由于某種原因不合理時(shí)使用它。這可能是因?yàn)橐粋€(gè)對(duì)象太大以至于復(fù)制它會(huì)很慢,所以您只想將一個(gè)小指針傳遞給該對(duì)象并在內(nèi)存中使用相同的對(duì)象(可能是 http.Request 是一個(gè)指針的原因),或者因?yàn)槟枰薷膶?duì)代碼中其他地方可能已經(jīng)引用的對(duì)象的現(xiàn)有引用。您可以在此處查看net/http 的代碼以了解原因。(事實(shí)上,對(duì)于任何 Go 標(biāo)準(zhǔn)庫(kù),如果你想研究為什么或如何以某種方式完成某事,代碼是開(kāi)放的。)

但這有點(diǎn)無(wú)關(guān)緊要,因?yàn)樽鳛橛脩?,您傳遞指針的原因是因?yàn)楹瘮?shù)被定義為將指針作為參數(shù)。編寫(xiě)庫(kù)的程序員決定使用指針的原因是什么并不重要。您可以查找 go 文檔,或者您可以做您正在做的事情,并且只傳遞一個(gè)值,如果編譯器抱怨修復(fù)它。


查看完整回答
反對(duì) 回復(fù) 2021-12-07
?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊

當(dāng)您只是了解它們的工作原理時(shí),指針是非常簡(jiǎn)單的概念,但是在理解之前,它確實(shí)看起來(lái)很難且令人討厭,尤其是在 C 中。有指針?biāo)阈g(shù)、指向指針的指針等。


無(wú)論如何,您不必使用指針,如果您的庫(kù)不強(qiáng)制您使用,但由于函數(shù)作用域的原因,傳遞變量、函數(shù)周?chē)臄?shù)據(jù)結(jié)構(gòu)可能會(huì)將所有內(nèi)容復(fù)制到另一個(gè)內(nèi)存部分。


在大多數(shù)語(yǔ)言中,值是通過(guò)文字傳遞的。這意味著當(dāng)您將變量傳遞給函數(shù)或類(lèi)時(shí),它可能會(huì)復(fù)制它。


更多的內(nèi)存消耗,也需要 CPU 時(shí)間來(lái)復(fù)制項(xiàng)目。不利于復(fù)雜性。


另一方面,像 PHP 這樣的一些語(yǔ)言有一些自動(dòng)化,比如copy on write algorithm當(dāng)你將一個(gè)參數(shù)傳遞給它通過(guò)引用傳遞的函數(shù)時(shí),它只將內(nèi)存地址傳遞給函數(shù),直到函數(shù)嘗試寫(xiě)入這個(gè)變量,在那個(gè)時(shí)候它只是復(fù)制變量.


但自動(dòng)化也會(huì)帶來(lái)一些成本。costGo的真正重點(diǎn)是盡可能快,少自動(dòng)化,多用戶控制,但也嘗試安全和簡(jiǎn)單。不像 C、C++,它不會(huì)讓你感到羞恥。


在您的示例中,http.ResponseWriter當(dāng)您通過(guò)其內(nèi)存引用(作為指針)將其傳遞給 any 函數(shù)時(shí),您在此函數(shù)內(nèi)向其寫(xiě)入內(nèi)容,它只是直接寫(xiě)入它,沒(méi)有特殊算法或檢查是否沒(méi)有類(lèi)型不匹配等. 可能有一些像垃圾收集器這樣的檢查,但它確實(shí)帶來(lái)了好處而不是成本。


同樣在 PHP 中,Java 對(duì)象通過(guò)它們的引用傳遞,但該語(yǔ)言只是隱藏了這種冗長(zhǎng)。


我讀過(guò)接口實(shí)際上是指針


不完全I(xiàn)nterface{}是,Go 中是基類(lèi)型,所以每個(gè)類(lèi)型都實(shí)現(xiàn)了接口類(lèi)型,從這個(gè)角度來(lái)看,它只是一個(gè)類(lèi)型,因此作為指針調(diào)用沒(méi)有任何意義。它給你一個(gè)活力,例如:如果你從一個(gè)數(shù)據(jù)沒(méi)有結(jié)構(gòu)化和不一致的源讀取,結(jié)構(gòu)可以隨時(shí)改變,例如 XML 或 JSON 源。只需使用界面!您已經(jīng)知道每種類(lèi)型的祖先都是接口,它只會(huì)在運(yùn)行時(shí)處理數(shù)據(jù)的底層結(jié)構(gòu)/類(lèi)型。


但是您也可以使用接口術(shù)語(yǔ)來(lái)定義接口(如 java、c#、php 等)并放置實(shí)現(xiàn)方法。當(dāng)任何滿足這些方法的結(jié)構(gòu)體時(shí)。它自然地實(shí)現(xiàn)了接口。此實(shí)現(xiàn)設(shè)計(jì)稱(chēng)為 Duck Typing,請(qǐng)閱讀以獲取更多信息https://en.wikipedia.org/wiki/Duck_typing


查看完整回答
反對(duì) 回復(fù) 2021-12-07
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可以將指針視為指向?qū)ο髢?nèi)存地址的值。與大多數(shù)數(shù)據(jù)結(jié)構(gòu)相比,指針很?。ū热?8 個(gè)字節(jié))。

很多時(shí)候你會(huì)得到一個(gè)指向?qū)ο蟮闹羔槪驗(yàn)閭鬟f這 8 個(gè)字節(jié)比創(chuàng)建你想要傳遞的整個(gè)對(duì)象的副本要快得多。

在 Request 對(duì)象的情況下,與僅傳遞可以訪問(wèn)原始數(shù)據(jù)的指針相比,創(chuàng)建請(qǐng)求下所有內(nèi)容的副本(有效負(fù)載、標(biāo)頭等)的成本非常高。


查看完整回答
反對(duì) 回復(fù) 2021-12-07
  • 3 回答
  • 0 關(guān)注
  • 207 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)