2 回答

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
作業(yè):
*s = *(*State)(&state)
復(fù)制指向的值。這是必需的,因?yàn)樗且粋€(gè)局部變量,一旦函數(shù)返回,將任何內(nèi)容分配給自身將不起作用。s
s
其目的是將某些內(nèi)容分配到指向的位置,這就是上述賦值語(yǔ)句所做的。s
使用的目標(biāo)是創(chuàng)建一個(gè)沒(méi)有該方法的新類(lèi)型,因此傳遞給不會(huì)導(dǎo)致堆棧溢出。rawState
UnmarshalJSON()
*rawState
json.Unmarshal()
請(qǐng)參閱相關(guān)內(nèi)容:調(diào)用 json。取消消息在未使用JSON函數(shù)內(nèi)部的取消消息,而不會(huì)導(dǎo)致堆棧溢出

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
s
是一個(gè)指針,讓我們說(shuō)指向內(nèi)存中的位置。x
&state
是位于內(nèi)存位置 的另一個(gè)指針。y
調(diào)用該函數(shù)時(shí),指針指向內(nèi)存位置 。UnmarshalJSON
x
如果您這樣做:
*s = *(*State)(&state)
這意味著:將指針指向 (),將其轉(zhuǎn)換為正確的指針類(lèi)型(),然后轉(zhuǎn)到內(nèi)存位置(后面的開(kāi)頭的 *),然后將 value() 復(fù)制到另一個(gè)內(nèi)存位置 ()。y
&state
*State
y
=
=
x
*s
另一方面,如果您這樣做:s = (*State)(&state)
這意味著:將指針指向 (),將其轉(zhuǎn)換為正確的指針類(lèi)型 (),將指針 () 復(fù)制到接收器 ()。任何稱(chēng)為此函數(shù)的內(nèi)存位置都保持不變。y
&state
*State
=
s
x
此外,當(dāng)方法被調(diào)用指針本身時(shí),由 as 接收的是指針在調(diào)用它的位置的副本。此內(nèi)部是類(lèi)型值,該值不存在于 之外。因此,此分配在 之外將毫無(wú)意義。UnmarshalJSON
s
s
UnmarshalJSON
*State
UnmarshalJSON
UnmarshalJSON
- 2 回答
- 0 關(guān)注
- 115 瀏覽
添加回答
舉報(bào)