package main
import "fmt"
type Counter struct {
count int
name string
}
// Pointer receiver — needed to mutate
func (c *Counter) Inc() {
c.count++
}
// Value receiver — fine when you only read
func (c Counter) String() string {
return fmt.Sprintf("%s: %d", c.name, c.count)
}
// Convention: be consistent — if any method needs pointer receiver,
// make ALL methods pointer receivers.
func main() {
c := Counter{name: "visits"}
c.Inc()
c.Inc()
c.Inc()
fmt.Println(c) // visits: 3 (uses String())
// Pointer methods can be called on values; Go auto-addresses
var p Counter
p.Inc() // sugar for (&p).Inc()
fmt.Println(p)
}
Create a free account and build your private vault. Share publicly whenever you want.