Definiowanie metod dla struktur
Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 6 z 68.
W Go metoda to funkcja należąca do określonego typu. W przeciwieństwie do zwykłych funkcji, które działają samodzielnie, metody są przypisane do struktur i pozwalają definiować zachowanie własnych typów danych.
Aby zdefiniować metodę, umieść odbiornik między słowem kluczowym func a nazwą metody. Odbiornik określa, do którego typu należy metoda.
type Person struct {
Name string
Age int
}
func (p Person) greet() {
fmt.Printf("Hello, my name is %s\n", p.Name)
}W tym przykładzie (p Person) jest odbiorcą, co sprawia, że greet jest metodą typu Person. Zmienna p reprezentuje instancję typu Person, na której wywoływana jest metoda, podobnie jak this w innych językach.
Możesz następnie wywołać metodę za pomocą notacji kropkowej na dowolnej instancji Person, dzięki czemu twoje struktury będą mogły wykonywać działania związane ze swoimi danymi.
Wyzwanie
ŁatwyW tym wyzwaniu przećwiczysz definiowanie metod dla struktur, tworząc prosty system zarządzania książkami. Utworzysz strukturę Book i zdefiniujesz metody, które umożliwią wyświetlanie informacji o książce.
Ważna uwaga: Ponieważ tytuły książek i nazwiska autorów mogą zawierać spacje, do odczytywania całych wierszy wejściowych użyj bufio.Scanner. Funkcja fmt.Scanln przestaje odczytywać dane przy pierwszej spacji, co spowodowałoby błędne odczytanie wielowyrazowych tytułów i nazwisk autorów. Użyj bufio.NewScanner(os.Stdin) i wywołaj scanner.Scan(), a następnie scanner.Text(), aby odczytać całe wiersze.
Otrzymasz trzy dane wejściowe:
- Ciąg znaków reprezentujący tytuł książki (np.
"The Go Programming Language") - Ciąg znaków reprezentujący nazwisko autora (np.
"Alan Donovan") - Ciąg znaków reprezentujący liczbę stron (np.
"380")
Twoje zadanie:
- Zdefiniuj strukturę
Bookz trzema polami:Title(string),Author(string) iPages(int) - Utwórz metodę o nazwie
displayInfoz odbiornikiem przez wartość, która wypisuje informacje o książce w formacie:"Title: [title], Author: [author], Pages: [pages]" - Utwórz metodę o nazwie
getDescriptionz odbiornikiem przez wartość, która zwraca ciąg znaków w formacie:"[title] by [author]" - Użyj
bufio.Scanner, aby poprawnie odczytać wiersze wejściowe:- Utwórz skaner:
scanner := bufio.NewScanner(os.Stdin) - Dla każdego wiersza wejściowego: wywołaj
scanner.Scan(), a następniescanner.Text() - Dzięki temu tytuły i nazwiska autorów zawierające spacje zostaną poprawnie odczytane
- Utwórz skaner:
- Przetwórz dane wejściowe, aby utworzyć instancję
Book - Wywołaj metodę
displayInfo, aby wypisać informacje o książce - Wywołaj metodę
getDescriptioni wypisz zwrócony opis
Metody powinny używać zmiennej odbiornika do uzyskiwania dostępu do pól struktury i wykonywania odpowiednich operacji. Pamiętaj, że metody z odbiornikiem przez wartość działają na kopii instancji struktury.
Spróbuj swoich sił
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
// TODO: Zdefiniuj tutaj strukturę Book
// TODO: Zdefiniuj tutaj metodę displayInfo
// TODO: Zdefiniuj tutaj metodę getDescription
func main() {
// Utwórz skaner do odczytywania wierszy wejściowych
scanner := bufio.NewScanner(os.Stdin)
// Odczytaj tytuł
scanner.Scan()
title := scanner.Text()
// Odczytaj autora
scanner.Scan()
author := scanner.Text()
// Odczytaj liczbę stron
scanner.Scan()
pagesStr := scanner.Text()
// Przekonwertuj ciąg znaków zawierający liczbę stron na liczbę całkowitą
pages, _ := strconv.Atoi(pagesStr)
// TODO: Utwórz instancję Book i wywołaj metody
}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
1Zaawansowane sterowanie przepływem
Instrukcja switch z `fallthrough`Przerywanie zagnieżdżonych pętliKontynuowanie określonej pętliInstrukcja `goto`Podsumowanie — zaawansowane sterowanie pętlami4Projekt: Prosta lista zadań
Konfiguracja projektuDodawanie zadania2Struktury i metody
Definiowanie metod dla strukturOdbiorniki przez wartośćOdbiorniki przez wskaźnikWybór odbiornikówMetody a funkcjePodsumowanie — działanie struktur5Mapy w szczegółach
Mapy strukturWskaźniki jako wartości mapSprawdzanie, czy mapy są nilPorównywanie mapPodsumowanie — licznik częstości słów3Interfejsy (podstawy)
Czym jest interfejs?Definiowanie interfejsuImplementowanie interfejsuUżywanie typów interfejsowychPusty interfejsAsercje typuPrzełącznik typówPodsumowanie – kształty i zachowaniaPoćwicz samodzielnie: Kompilator Go online