一尘不染

为Golang结构字段分配一个新值

go

我对结构字段有疑问。

我已经创建了一个类Point与一种方法Move()即增加或减少对象变量x通过dx。另一种方法Print用于输出结果。

main()一个新的实例与默认创建x = 3dx = 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()
}

阅读 194

收藏
2020-07-02

共1个答案

一尘不染

您需要在此处使用指针,否则每次都仅更改原始对象的副本。一切都通过价值传递

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()
}
2020-07-02