Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Łatwy

W 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:

  1. Zdefiniuj strukturę Book z trzema polami: Title (string), Author (string) i Pages (int)
  2. Utwórz metodę o nazwie displayInfo z odbiornikiem przez wartość, która wypisuje informacje o książce w formacie: "Title: [title], Author: [author], Pages: [pages]"
  3. Utwórz metodę o nazwie getDescription z odbiornikiem przez wartość, która zwraca ciąg znaków w formacie: "[title] by [author]"
  4. 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ępnie scanner.Text()
    • Dzięki temu tytuły i nazwiska autorów zawierające spacje zostaną poprawnie odczytane
  5. Przetwórz dane wejściowe, aby utworzyć instancję Book
  6. Wywołaj metodę displayInfo, aby wypisać informacje o książce
  7. Wywołaj metodę getDescription i 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
    
}
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