2013-05-17 13 views
5

Ich habe erwartet, 3 zu sehen, was ist los?Inkrementieren der Strukturvariablen in go

package main 

import "fmt" 

type Counter struct { 
    count int 
} 

func (self Counter) currentValue() int { 
    return self.count 
} 
func (self Counter) increment() { 
    self.count++ 
} 

func main() { 
    counter := Counter{1} 
    counter.increment() 
    counter.increment() 

    fmt.Printf("current value %d", counter.currentValue()) 
} 

http://play.golang.org/p/r3csfrD53A

+2

Ziemlich viel ein Duplikat http://stackoverflow.com/questions/16540481/why-is-this-struct-not-working – nemo

Antwort

20

Ihre Methode Empfänger ist ein struct Wert, der bedeutet, dass der Empfänger eine Kopie der Struktur bekommt, wenn sie aufgerufen, deshalb ist es die Kopie und die Vorlage wird nicht aktualisiert erhöht wird.

Um die Aktualisierungen anzuzeigen, setzen Sie Ihre Methode stattdessen auf einen Strukturzeiger.

func (self *Counter) increment() { 
    self.count++ 
} 

Jetzt ist self ein Zeiger auf Ihre counter Variable, und so wird es seinen Wert aktualisieren.


http://play.golang.org/p/h5dJ3e5YBC

+0

Ohh .. :) jetzt macht es Sinn, dank – OscarRyz

+0

Gern geschehen. –

+0

@OscarRyz sollten Sie dies als die Antwort markieren, wenn es Ihr Problem gelöst hat. – Lander