From a74265e4dc5b69614fa9bf9e633cb99cc3a06f47 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Mon, 13 Oct 2025 12:36:59 +0200 Subject: [PATCH] documentation for methods and interfaces --- go/02-next-level/00-methods.go | 6 ++++-- go/02-next-level/01-interfaces.go | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/go/02-next-level/00-methods.go b/go/02-next-level/00-methods.go index a005976..ae1a6ac 100644 --- a/go/02-next-level/00-methods.go +++ b/go/02-next-level/00-methods.go @@ -6,12 +6,14 @@ type Counter struct { value int } -// pointer receiver +// pointer receiver. The method operates directly on the object c points to +// Use a pointer receiver whenever the object needs to be modified. func (c *Counter) Increment() { c.value++ } -// value receiver +// value receiver. The method operates on copy of object c. Use a value +// receiver when the object does not need to be modified in the method. func (c Counter) String() string { return fmt.Sprintf("Counter value: %d", c.value) } diff --git a/go/02-next-level/01-interfaces.go b/go/02-next-level/01-interfaces.go index 6a6e25f..c0eb97f 100644 --- a/go/02-next-level/01-interfaces.go +++ b/go/02-next-level/01-interfaces.go @@ -14,12 +14,14 @@ type rect struct { width, height float64 } +// Ensure that rect implements the geometry interface var _ geometry = rect{} type circle struct { radius float64 } +// Ensure that circle implements the geometry interface var _ geometry = circle{} func (r rect) area() float64 { @@ -36,12 +38,16 @@ func (c circle) perim() float64 { return 2 * math.Pi * c.radius } +//Metods demonstrates how to use an interface func measure(g geometry) { fmt.Println(g) fmt.Println(g.area()) fmt.Println(g.perim()) } + +//Method demonstrates casting an interface to a concrete type. +//Should be avoided in practice whenever possible. func detectCircle(g geometry) { if c, ok := g.(circle); ok { fmt.Println("circle with radius", c.radius)