2013-05-17 11 views
5

Spodziewałem się zobaczyć 3, co się dzieje?Przyrostowa zmienna struktury w 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

Prawie duplikat http://stackoverflow.com/questions/16540481/why-is-this-struct-not-working – nemo

Odpowiedz

20

Odbiornik metoda jest wartością struct, co oznacza, że ​​odbiorca dostaje kopię struktury Wywołany więc to zwiększając kopię i oryginał nie jest aktualizowana.

Aby zobaczyć aktualizacje, zamiast tego umieść metodę na wskaźniku struktury.

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

Teraz self jest wskaźnikiem do zmiennej counter, a więc będzie ona zaktualizować swoją wartość.


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

+0

Ohh .. :) teraz ma to sens, dzięki – OscarRyz

+0

Nie ma za co. –

+0

@OscarRyz należy oznaczyć to jako odpowiedź, jeśli rozwiązuje problem. – Lander