2 回答

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

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