我对结构字段有疑问。

我用一种方法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()
}

最佳答案

您需要在此处使用指针,否则每次都仅更改原始对象的副本。一切都在进行中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/

10-12 06:40