Usare le interface in Go
Go mette a disposizione le interface per organizzare meglio il codice; ad esempio se abbiamo bisogno di assegnare delle funzione a delle struct.
Per chi conosce la OOP, la funzione è molto simile, solo che è differente il modo in cui vengono usate.
In primis, come vedremo, non c'è bisogno di implementarle in maniera specifica; in Go le interfacce vengono implementate in maniera implicita.
Supponiamo di avere due struct (cane e gatto) che devono visualizzare in console il loro verso.
Potremmo creare una funzione per ogni animale, ma non sarebbe ottimale.
Possiamo creare una interface che fa quello che ci serve:
package main
import "fmt"
type animale interface {
getVerso() string
}
type cane struct{}
type gatto struct{}
func (c cane) getVerso() string {
return "bau"
}
func (g gatto) getVerso() string {
return "miao"
}
func printVerso(a animale) {
fmt.Println(a.getVerso())
}
func main() {
c := cane{}
g := gatto{}
printVerso(c)
printVerso(g)
}
Come vedete abbiamo la funzione getVerso che rispetta la signature della interface; a questa funzione passiamo un receiver (una delle due struct).
Tutto qua!
Ovviamene potete mettere quante funzioni volete nella interface, e la cosa bella è che non devono essere implementate per forza (come accade in vari altri linguaggi).
Enjoy!
go struct interface receiver
Commentami!