我对结构字段有疑问。
我用一种方法Point
创建了一个Move()
类,该方法通过x
增加或减少对象变量dx
。另一种方法Print
用于输出结果。
在main()
中,将使用默认的x = 3
和dx = 2
创建一个新实例,然后将其称为Move()
和Print()
。我希望x
期间Move()
的值被更改,并且Print()
将产生Final x=5
,但是显示以下内容:
2014/07/28 15:49:44 New X=5
2014/07/28 15:49:44 Final X=3
我的代码有什么问题?
type Point struct {
x, dx int
}
func (s Point) Move() {
s.x += s.dx
log.Printf("New X=%d", s.x)
}
func (s Point) Print() {
log.Printf("Final X=%d", s.x)
}
func main() {
st := Point{ 3, 2 };
st.Move()
st.Print()
}
最佳答案
您需要在此处使用指针,否则每次都仅更改原始对象的副本。一切都在进行中passed by value。
type Point struct {
x, dx int
}
func (s *Point) Move() {
s.x += s.dx
log.Printf("New X=%d", s.x)
}
func (s *Point) Print() {
log.Printf("Final X=%d", s.x)
}
func main() {
st := Point{ 3, 2 };
st.Move()
st.Print()
}
关于class - 为Golang结构字段分配一个新值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24994721/