Сам искал ответа на этот вопрос. И вдохновившись примером с лампочками, таки разобрался)
Пусть тут полежит для потомков
package main
import "fmt"
type LampDiode struct{}
func (l *LampDiode) ScrewOn() string {
return "Lamp 1"
}
type LampIncandescent struct{}
func (l *LampIncandescent) ScrewOn() string {
return "Lamp 2"
}
type Lamp interface {
ScrewOn() string
}
func Chandelier(l Lamp) {
fmt.Println(l.ScrewOn())
}
func main() {
var l1 Lamp
l1 = new(LampDiode)
Chandelier(l1)
var l2 Lamp
l2 = new(LampIncandescent)
Chandelier(l2)
}