2013-05-17 18 views
5

私は3を見ていますが、どうなっていますか?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

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

答えて

20

あなたの方法の受信機は、受信機が呼び出された構造体のコピーを取得する意味構造体の値であり、したがって、それはコピーをインクリメントしていますし、あなたの元には更新されません。

更新プログラムを表示するには、メソッドをstructポインタに置きます。

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

selfあなたcounter変数へのポインタであり、それはその値を更新します。ほとんど


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

+0

おお.. :)今、それは理にかなって感謝の重複 – OscarRyz

+0

ようこそ。 –

+0

@OscarRyz問題を解決した場合は、これを答えとしてタグ付けする必要があります。 – Lander

関連する問題