Skip to content

Instantly share code, notes, and snippets.

@jay-babu
Created October 4, 2022 02:26
Show Gist options
  • Save jay-babu/9ba08997126a7afaa4973f480948132b to your computer and use it in GitHub Desktop.
Save jay-babu/9ba08997126a7afaa4973f480948132b to your computer and use it in GitHub Desktop.
SOLID: Open-Closed Principle `ideal`
package main
import (
"fmt"
"math"
)
type geometry interface {
// Area of a shape
area() float64
// Name of shape
name() string
}
// For our example we'll implement this interface on
// `rect` and `circle` types.
type rect struct {
width, height float64
}
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) name() string {
return "Rectangle"
}
type circle struct {
radius float64
}
func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c circle) name() string {
return "Circle"
}
func measure(g geometry) {
fmt.Println(g.name())
fmt.Println(g.area())
}
func main() {
r := rect{width: 3, height: 4}
c := circle{radius: 5}
measure(r)
measure(c)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment