2013-05-17 34 views
5

Tôi đã mong đợi để xem 3, những gì đang xảy ra?Biến đổi cấu trúc gia tăng trong 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

Khá nhiều bản sao của http://stackoverflow.com/questions/16540481/why-is-this-struct-not-working – nemo

Trả lời

20

nhận phương pháp của bạn là một giá trị struct, có nghĩa là người nhận được một bản sao của struct khi gọi, do đó nó incrementing sao chép và ban đầu của bạn không được cập nhật.

Để xem các cập nhật, hãy đặt phương thức của bạn trên con trỏ cấu trúc thay thế.

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

Bây giờ self là một con trỏ đến biến counter của bạn, và vì vậy nó sẽ cập nhật giá trị của nó.


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

+0

Ohh .. :) bây giờ nó có ý nghĩa nhờ – OscarRyz

+0

Bạn được chào đón. –

+0

@OscarRyz bạn nên gắn thẻ này làm câu trả lời nếu nó giải quyết được sự cố của bạn. – Lander

Các vấn đề liên quan