我对结构字段有疑问。
我已经创建了一个类Point与一种方法Move()即增加或减少对象变量x通过dx。另一种方法Print用于输出结果。
Point
Move()
x
dx
Print
在main()一个新的实例与默认创建x = 3和dx = 2,然后我打电话Move()和Print()。我希望x在期间更改的值Move()并Print()产生Final x=5,但它显示的是:
main()
x = 3
dx = 2
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() }
您需要在此处使用指针,否则每次都仅更改原始对象的副本。一切都通过价值传递。
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() }