2013-05-17 11 views
5

Mi aspettavo di vedere 3, cosa sta succedendo?Variabile di struttura di incremento 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

Praticamente un duplicato di http://stackoverflow.com/questions/16540481/why-is-this-struct-not-working – nemo

risposta

20

Il ricevitore metodo è un valore struct, il che significa che il ricevitore riceve una copia della struttura quando invocato, pertanto, è incrementare la copia e l'originale non viene aggiornato.

Per visualizzare gli aggiornamenti, posizionare il metodo su un puntatore di struct.

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

Ora self è un puntatore alla variabile d'counter, e così aggiornerò il suo valore.


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

+0

Ohh .. :) ora ha un senso grazie – OscarRyz

+0

Prego. –

+0

@OscarRyz dovresti taggare come risposta se risolve il tuo problema. – Lander