Go 中通过指针接收器修改简单类型的值
通过指针接收器方法修改简单类型的值可以是Go 中的常见任务。然而,理解指针在这种情况下的行为至关重要。
在提供的示例中:
<br>type FooInt int<p>func (fi *FooInt ) FromString(i 字符串) {</p><pre class="brush:php;toolbar:false">num, _ := strconv.Atoi(i) tmp := FooInt(num) fi = &tmp
}
当指针作为接收者传递时,会在方法内创建该指针的副本。方法内对副本所做的任何修改都不会影响原始指针。
在代码片段中,*fi 是传递给 FromString 方法的 fi 指针的副本。当您将 &tmp 分配给 *fi 时,您实际上是在更改副本的值,而不是原始 fi 指针。
要修改原始指针的值,您需要:
返回新的指针值:
<br> func (fi <em>FooInt) FromString(i string) </em>FooInt {<pre class="brush:php;toolbar:false"> num, _ := strconv.Atoi(i) tmp := FooInt(num) return &tmp
}
将非零指针传递给要更改的值:
<br> func (fi <em>FooInt) FromString(i string, p </em>*FooInt) {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> num, _ := strconv.Atoi(i) tmp := FooInt(num) *p = &tmp
}
确保接收者没有nil:
<br> func (fi *FooInt) FromString(i string) {<pre class="brush:php;toolbar:false"> num, _ := strconv.Atoi(i) *fi = FooInt(num)
}
通过确保接收者是一个有效的指针并修改里面的指向值方法,可以通过指针接收器有效修改原始简单类型的值。
以上是如何在 Go 中使用指针接收器修改简单类型的值?的详细内容。更多信息请关注PHP中文网其他相关文章!