Go Workspace & Module
Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 2 von 107.
Ein Go-Modul ist eine Sammlung zusammengehöriger Go-Dateien. Die go.mod-Datei im Stammverzeichnis Ihres Projekts deklariert den Modulnamen und die Go-Version.
Initialisieren Sie ein Modul mit dem Terminal-Befehl
go mod init myappDies erstellt eine go.mod-Datei
module myapp
go 1.21Eine einfache Projektstruktur
myapp/
├── go.mod
├── main.go
└── helper.goAlle Dateien teilen sich dasselbe Package
// helper.go
package main
func Double(n int) int {
return n * 2
}// main.go
package main
import "fmt"
func main() {
result := Double(5)
fmt.Println(result) // Ausgabe: 10
}Die Datei go.mod definiert Ihr Projekt als Modul. Alle .go-Dateien, die dasselbe package deklarieren, können direkt auf die Funktionen der jeweils anderen zugreifen. Der Modulname in go.mod identifiziert Ihr Projekt.
Aufgabe
EinfachVervollständige mathhelper.go innerhalb desselben Moduls und Pakets:
Double— gibt n * 2 zurückTriple— gibt n * 3 zurückSquare— gibt n * n zurück
Spickzettel
Ein Go-Modul ist eine Sammlung zusammengehöriger Go-Dateien, die durch eine go.mod-Datei im Projektverzeichnis deklariert werden.
Initialisieren Sie ein Modul:
go mod init myappDies erstellt eine go.mod-Datei:
module myapp
go 1.21Alle .go-Dateien im selben Package können direkt auf die Funktionen der jeweils anderen zugreifen:
// helper.go
package main
func Double(n int) int {
return n * 2
}// main.go
package main
import "fmt"
func main() {
result := Double(5)
fmt.Println(result) // Ausgabe: 10
}Probier es selbst
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
fmt.Printf("Double: %d\n", Double(n))
fmt.Printf("Triple: %d\n", Triple(n))
fmt.Printf("Square: %d\n", Square(n))
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der Go OOP
Externe DateienGo Workspace & ModulePackages & ImportsExportierte vs. nicht-exportierte NamenEinführung in OOP in GoStructs als KlassenMethoden für Structs definierenPointer- vs. Value-ReceiverStruct-InitialisierungKonstruktor-FunktionenZusammenfassung – Einfacher Taschenrechner4Interfaces
Einführung in InterfacesImplizite ImplementierungInterface als VertragLeeres Interface (any)Type AssertionType SwitchInterface-KompositionStringer & Error InterfacesRückblick - Formen-Rechner7Kapselung
Exportierte vs. nicht exportierte FelderKapselung auf Paket-EbeneGetter- & Setter-MethodenInformation Hiding in GoZusammenfassung - Studierendendatensätze10Generics (Go 1.18+)
Einführung in GenericsTypparameterType ConstraintsGenerische StructsWorkaround für generische MethodenZusammenfassung – Generische Collection2Vertiefung: Typen & Structs
Basis- & zusammengesetzte TypenBenutzerdefinierte TypdefinitionenStruct TagsAnonyme StructsVerschachtelte StructsZero Values & StandardwerteZusammenfassung - Kontaktbuch5Komposition statt Vererbung
Warum Go keine Vererbung hatGrundlagen des Struct EmbeddingMethod PromotionEinbetten mehrerer StructsEmbedding vs. AggregationShadowing eingebetteter MethodenZusammenfassung – Mitarbeiter-Hierarchie8Fehlerbehandlung & OOP
Das error-InterfaceEigene FehlertypenError Wrapping (fmt.Errorf)Sentinel-Fehlererrors.Is() und errors.As()Panic, Defer und RecoverZusammenfassung – Datei-Parser3Zeiger & Speicher
Zeiger-Grundlagen in GoZeiger auf StructsWertübergabe vs. ReferenzübergabeDie new() FunktionGarbage Collection in GoWiederholung – Linked List Builder6Polymorphismus in Go
Polymorphismus über InterfacesDuck Typing in GoInterface-ErfüllungsregelnPolymorphe CollectionsDependency InjectionZusammenfassung – Payment Processor9Nebenläufigkeit & OOP
Goroutines GrundlagenChannels & KommunikationGepufferte vs. ungepufferte ChannelsSelect-Anweisungsync.Mutex & sync.RWMutexsync.WaitGroupThread-sicheres Struct-DesignZusammenfassung - Worker Pool