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 關注
- 264 瀏覽
添加回答
舉報