Zusammenfassung – Struct-Verhalten
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 11 von 68.
Aufgabe
EinfachIn dieser Herausforderung üben Sie die Implementierung von sowohl Value- als auch Pointer-Receivern, indem Sie ein einfaches Rechteck-Verwaltungssystem erstellen. Sie erstellen eine Rectangle-Struktur und definieren zwei verschiedene Arten von Methoden, die demonstrieren, wann welcher Receiver-Typ verwendet werden sollte.
Sie erhalten drei Eingaben:
- Ein String, der die Breite des Rechtecks darstellt (z. B.
"5.0") - Ein String, der die Höhe des Rechtecks darstellt (z. B.
"3.0") - Ein String, der einen Skalierungsfaktor darstellt (z. B.
"2.0")
Ihre Aufgabe ist es:
- Definieren Sie eine
Rectangle-Struktur mit zwei Feldern:Width(float64) undHeight(float64) - Erstellen Sie eine Methode namens
areamit einem Value-Receiver, die die Fläche des Rechtecks berechnet und zurückgibt (Breite × Höhe) - Erstellen Sie eine Methode namens
scalemit einem Pointer-Receiver, die sowohl die Breite als auch die Höhe mit dem angegebenen Skalierungsfaktor multipliziert - Parsen Sie die Eingaben, um eine
Rectangle-Instanz zu erstellen - Geben Sie die anfängliche Fläche im Format
"Initial area: [area]"aus - Rufen Sie die Methode
scalemit dem Skalierungsfaktor auf - Geben Sie die skalierte Fläche im Format
"Scaled area: [area]"aus
Die Flächenwerte sollten als ganze Zahlen angezeigt werden, wenn sie Ganzzahlen sind (z. B. 15 anstelle von 15.0), aber bei Bedarf mit Dezimalstellen (z. B. 15.5). Diese Herausforderung demonstriert das wichtigste Prinzip: Verwenden Sie Value-Receiver für Methoden, die Daten nur lesen (wie die Flächenberechnung), und Pointer-Receiver für Methoden, die die ursprüngliche Struktur ändern (wie das Skalieren von Dimensionen).
Probier es selbst
package main
import (
"fmt"
"strconv"
)
// TODO: Definiere hier dein Rectangle-Struct
// TODO: Implementiere hier die area-Methode mit Value-Receiver
// TODO: Implementiere hier die scale-Methode mit Pointer-Receiver
func main() {
// Eingabe lesen
var widthStr string
var heightStr string
var scaleStr string
fmt.Scanln(&widthStr)
fmt.Scanln(&heightStr)
fmt.Scanln(&scaleStr)
// Eingaben in float64 umwandeln
width, _ := strconv.ParseFloat(widthStr, 64)
height, _ := strconv.ParseFloat(heightStr, 64)
scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
// TODO: Rectangle-Instanz erstellen und die Lösung unten implementieren
// Anfängliche Fläche ausgeben
// fmt.Printf("Initial area: %.0f\n", initialArea) // Dieses Format für die Ausgabe verwenden
// Rechteck skalieren
// Skalierte Fläche ausgeben
// fmt.Printf("Scaled area: %.0f\n", scaledArea) // Dieses Format für die Ausgabe verwenden
}Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten