3 回答
TA贡献1795条经验 获得超7个赞
提供了完美的文档规范说明,但我想基于您的示例添加一个代码示例。我认为您的重点应该放在“为什么有两种方法来做同一件事”上,而不是在何时使用一种方法与另一种方法上。具有指针作为接收者的方法具有修改该接收者的值的能力,而具有具有接收者的值的方法则不能修改。这是因为这些方法接收接收者的副本。当您获得一个指针的副本时,您仍然可以修改其值。当您收到该值的副本时,您在该方法中所做的更改只会更改副本,而不会更改原始副本:
package main
import "fmt"
type MyStruct struct {
X int
}
func (m *MyStruct) resetPtr() {
m.X = 0
}
func (m MyStruct) resetValue() {
m.X = 0
}
func main() {
m1 := MyStruct{1}
m2 := &MyStruct{1}
fmt.Println("Original Values:", m1.X, m2.X)
m1.resetPtr()
m2.resetPtr()
fmt.Println("After resetPtr():", m1.X, m2.X)
m1 = MyStruct{1}
m2 = &MyStruct{1}
m1.resetValue()
m2.resetValue()
fmt.Println("After resetValue():", m1.X, m2.X)
}
输出
Original Values: 1 1
After resetPtr(): 0 0
After resetValue(): 1 1
您可以看到访问这些变量的方式并不是真正的问题。它的更多内容是您可以在方法内部使用它们做什么,以及如何将它们作为参数传递给其他函数或方法(正在复制)。
- 3 回答
- 0 关注
- 226 浏览
添加回答
举报