这个问题在这里已经有了答案:
How to set and get fields in struct's method
(3 个回答)
2年前关闭。
我创建了一个结构 Person
和方法AddPerson
它充当该结构的构造函数。
package main
import "fmt"
type Person struct {
name string
salary int
balance int
}
func AddPerson(name string, salary int) Person {
p := Person{}
p.name = name
p.salary = salary
p.balance = salary
return p
}
之后我添加了一个方法
spendMoney
它执行以下操作:func (p Person) spendMoney(amountSpent int) {
p.balance = p.salary - amountSpent
fmt.Println("The amount spent is : ", amountSpent)
fmt.Println("Balance left is : ", p.balance)
}
和
main
方法如下图:func main(){
p1 := AddPerson("A", 1500)
p2 := AddPerson("B", 2000)
p1.spendMoney(500)
p2.spendMoney(1000)
fmt.Println(p1.balance) //wanted to check the balance of p1 after spending.
}
我想在他花完钱后查看p1的余额,但它仍然显示和以前一样(即1500)。我是 Golang 的新手,来自 Python 背景,这种方式工作得很好。
最佳答案
您需要在指向对象的指针上定义方法,而不是对象的值。
func (p *Person) spendMoney(amountSpent int) {
p.balance = p.salary - amountSpent
}
与 Python 不同,您必须区分值和 pointers。 .值基本上是变量的副本,修改它们不会使变量本身发生变化,除非显式地为该变量分配一个新值。
This tutorial可能会让你更好地理解这一点。
关于oop - 对象变量在 Golang 中没有得到更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61181930/