Menu
Coddy logo textTech

Implementowanie interfejsu

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 14 z 68.

Skoro wiesz już, jak definiować interfejs, nauczmy się, jak typy Go faktycznie je implementują. Najważniejsze, co trzeba zrozumieć, to fakt, że Go używa niejawnej implementacji — nie jest potrzebne żadne specjalne słowo kluczowe ani deklaracja.

Jeśli typ ma wszystkie metody wymagane przez interfejs, automatycznie go spełnia. Nie musisz wyraźnie deklarować, że twój typ implementuje interfejs — Go ustala to za ciebie.

Oto jak to działa z interfejsem Shaper z poprzedniej lekcji:

type Circle struct {
    Radius float64
}

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

Ponieważ typ Circle ma metodę Area(), która zwraca wartość typu float64, automatycznie implementuje interfejs Shaper. Nie trzeba jawnie deklarować tej relacji — Go rozpoznaje ją na podstawie zgodności sygnatury metody.

To niejawne podejście sprawia, że interfejsy Go są niezwykle elastyczne. Każdy istniejący typ może spełniać wymagania nowego interfejsu, o ile ma wymagane metody, nawet jeśli interfejs został utworzony po napisaniu typu.

challenge icon

Wyzwanie

Łatwy

W tym wyzwaniu przećwiczysz implementowanie interfejsu, tworząc prosty system pojazdów. Utworzysz strukturę Car, która automatycznie implementuje interfejs Vehicle dzięki niejawnemu implementowaniu w Go.

Otrzymasz dwa wejścia:

  • Ciąg znaków reprezentujący markę samochodu (np. "Toyota")
  • Ciąg znaków reprezentujący prędkość samochodu w km/h (np. "120")

Twoim zadaniem jest:

  1. Zdefiniować interfejs Vehicle z jedną sygnaturą metody: GetInfo(), która zwraca ciąg znaków
  2. Zdefiniować strukturę Car z dwoma polami: Brand (string) i Speed (int)
  3. Zaimplementować metodę GetInfo() dla struktury Car, która zwraca ciąg znaków w formacie: "Brand: [brand], Speed: [speed] km/h"
  4. Przetworzyć dane wejściowe, aby utworzyć instancję Car
  5. Wywołać metodę GetInfo() i wypisać wynik

Pamiętaj, że w Go struktura Car automatycznie zaimplementuje interfejs Vehicle, ponieważ ma wymaganą metodę GetInfo() o prawidłowej sygnaturze. Nie trzeba jawnie deklarować, że Car implementuje Vehicle — Go rozpoznaje tę zależność niejawnie.

Spróbuj swoich sił

package main

import (
	"fmt"
	"strconv"
)

// TODO: 1. Zdefiniuj interfejs Vehicle z metodą GetInfo() zwracającą string

// TODO: 2. Zdefiniuj strukturę Car z polami Brand (string) i Speed (int)

// TODO: 3. Zaimplementuj metodę GetInfo() dla Car

func main() {
	// Wczytaj dane wejściowe
	var brand string
	var speedStr string
	fmt.Scanln(&brand)
	fmt.Scanln(&speedStr)

	// Przekonwertuj ciąg znaków reprezentujący prędkość na liczbę całkowitą
	speed, _ := strconv.Atoi(speedStr)

	// TODO: 4. Utwórz instancję Car, używając brand i speed, a następnie wywołaj GetInfo()
	result := "" // zastąp tę linię własną implementacją
	_ = brand
	_ = speed

	// Wyświetl wynik
	fmt.Println(result)
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online