Menu
Coddy logo textTech

Implementare un’interfaccia

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 14 di 68.

Ora che sai come definire un'interfaccia, impariamo come i tipi Go le implementano effettivamente. La cosa più importante da capire è che Go usa l'implementazione implicita: non serve alcuna parola chiave o dichiarazione speciale.

Se un tipo ha tutti i metodi richiesti da un'interfaccia, la soddisfa automaticamente. Non è necessario dichiarare esplicitamente che il proprio tipo implementa l'interfaccia: Go lo deduce automaticamente.

Ecco come funziona con l'interfaccia Shaper della lezione precedente:

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

Poiché il tipo Circle ha un metodo Area() che restituisce un float64, implementa automaticamente l’interfaccia Shaper. Non è necessario dichiarare esplicitamente questa relazione: Go la riconosce in base alla corrispondenza delle firme dei metodi.

Questo approccio implicito rende le interfacce Go incredibilmente flessibili. Qualsiasi tipo esistente può soddisfare una nuova interfaccia, purché abbia i metodi richiesti, anche se l’interfaccia è stata creata dopo che il tipo è stato scritto.

challenge icon

Sfida

Facile

In questa sfida, ti eserciterai a implementare un’interfaccia creando un semplice sistema di veicoli. Creerai una struct Car che implementa automaticamente un’interfaccia Vehicle grazie all’implementazione implicita di Go.

Riceverai due input:

  • Una stringa che rappresenta la marca dell’auto (ad es., "Toyota")
  • Una stringa che rappresenta la velocità dell’auto in km/h (ad es., "120")

Il tuo compito è:

  1. Definire un’interfaccia Vehicle con la firma di un metodo: GetInfo() che restituisce una stringa
  2. Definire una struct Car con due campi: Brand (stringa) e Speed (int)
  3. Implementare il metodo GetInfo() per la struct Car, in modo che restituisca una stringa nel formato: "Brand: [brand], Speed: [speed] km/h"
  4. Analizzare gli input per creare un’istanza di Car
  5. Chiamare il metodo GetInfo() e stampare il risultato

Ricorda che in Go la struct Car implementerà automaticamente l’interfaccia Vehicle perché dispone del metodo richiesto GetInfo() con la firma corretta. Non è necessario dichiarare esplicitamente che Car implementa Vehicle: Go riconosce implicitamente questa relazione.

Provalo tu

package main

import (
	"fmt"
	"strconv"
)

// TODO: 1. Definisci l'interfaccia Vehicle con un metodo GetInfo() che restituisce una string

// TODO: 2. Definisci la struct Car con i campi Brand (string) e Speed (int)

// TODO: 3. Implementa il metodo GetInfo() per Car

func main() {
	// Leggi l'input
	var brand string
	var speedStr string
	fmt.Scanln(&brand)
	fmt.Scanln(&speedStr)

	// Converti la stringa speed in un intero
	speed, _ := strconv.Atoi(speedStr)

	// TODO: 4. Crea un'istanza di Car usando brand e speed, poi chiama GetInfo()
	result := "" // sostituisci questa riga con la tua implementazione
	_ = brand
	_ = speed

	// Visualizza il risultato
	fmt.Println(result)
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online