Usare le interface in Go

Mattepuffo's logo
Usare le interface in Go

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!


Condividi

Commentami!