Interface = set of method signatures
It basically groups types together, based on their methods.
type shape interface {
area() float64
circumf() float64
}
Better example of an interface:
package main
import "fmt"
type Man struct {
Name string
Age int
}
type Woman struct {
Name string
Age int
}
// Just a set of method signatures
type Person interface {
Greet() string
}
func (w Woman) Greet() string {
return "Hello " + w.Name
}
func (m Man) Greet() string {
return "Hello " + m.Name
}
// now we can create a method using the interface:
func GreetPerson(p Person) string {
return p.Greet()
}
func main() {
var max = Man{"Max", 22}
var jane = Woman{"Jane", 26}
jane.Greet()
max.Greet()
fmt.Println(GreetPerson(jane))
}
A type implements an interface just by implementing its methods. There is no need to do this explicitly:
type I interface {
M()
}
type T struct {
S string
}
// This method means type T implements the interface I,
// but we don't need to explicitly declare that it does so.
func (t T) M() {
fmt.Println(t.S)
}
func main() {
var i I = T{"hello"}
i.M()
}
Next chapter: Defer