2 回答

TA贡献1793条经验 获得超6个赞
作业:
*s = *(*State)(&state)
复制指向的值。这是必需的,因为它是一个局部变量,一旦函数返回,将任何内容分配给自身将不起作用。s
s
其目的是将某些内容分配到指向的位置,这就是上述赋值语句所做的。s
使用的目标是创建一个没有该方法的新类型,因此传递给不会导致堆栈溢出。rawState
UnmarshalJSON()
*rawState
json.Unmarshal()
请参阅相关内容:调用 json。取消消息在未使用JSON函数内部的取消消息,而不会导致堆栈溢出

TA贡献1946条经验 获得超3个赞
s
是一个指针,让我们说指向内存中的位置。x
&state
是位于内存位置 的另一个指针。y
调用该函数时,指针指向内存位置 。UnmarshalJSON
x
如果您这样做:
*s = *(*State)(&state)
这意味着:将指针指向 (),将其转换为正确的指针类型(),然后转到内存位置(后面的开头的 *),然后将 value() 复制到另一个内存位置 ()。y
&state
*State
y
=
=
x
*s
另一方面,如果您这样做:s = (*State)(&state)
这意味着:将指针指向 (),将其转换为正确的指针类型 (),将指针 () 复制到接收器 ()。任何称为此函数的内存位置都保持不变。y
&state
*State
=
s
x
此外,当方法被调用指针本身时,由 as 接收的是指针在调用它的位置的副本。此内部是类型值,该值不存在于 之外。因此,此分配在 之外将毫无意义。UnmarshalJSON
s
s
UnmarshalJSON
*State
UnmarshalJSON
UnmarshalJSON
- 2 回答
- 0 关注
- 118 浏览
添加回答
举报