Menu
Coddy logo textTech

Exportierte vs. nicht-exportierte Namen

Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 4 von 107.

In Go bestimmt der erste Buchstabe eines Namens dessen Sichtbarkeit. Namen, die mit einem Großbuchstaben beginnen, sind exportiert (zugänglich aus anderen Paketen). Namen, die mit einem Kleinbuchstaben beginnen, sind nicht exportiert (privat für das Paket).

Exportierte Namen — außerhalb des Pakets sichtbar

type User struct {
    Name  string  // Exportiertes Feld
    Email string  // Exportiertes Feld
}

func CreateUser(name string) User { // Exportierte Funktion
    return User{Name: name}
}

Nicht exportierte Namen — nur innerhalb des Pakets sichtbar

type secret struct {     // Nicht exportiertes Struct
    password string      // Nicht exportiertes Feld
}

func validate() bool {   // Nicht exportierte Funktion
    return true
}

Gemischt — exportierte Struktur mit einigen nicht exportierten Feldern

type Account struct {
    Username string    // Exportiert - überall zugänglich
    Email    string    // Exportiert - überall zugänglich
    password string    // Nicht exportiert - nur innerhalb des Pakets
}

Diese Namenskonvention ersetzt Zugriffsmodifikatoren wie public und private, die in anderen Sprachen vorkommen.

// Großbuchstabe   = Exportiert (öffentlich)
// Kleinbuchstabe = Nicht exportiert (privat)

func SaveData() {}  // Exportiert
func loadData() {}  // Nicht exportiert

Das Befolgen dieser Konvention ist in Go essenziell. Wenn andere Pakete Ihren Code importieren, können sie nur auf Namen zugreifen, die mit einem Großbuchstaben beginnen.

challenge icon

Aufgabe

Mittel

Korrigiere alle Namen in product.go, damit sie der Export-Namenskonvention von Go entsprechen. Schreibe den ersten Buchstaben groß bei:

  • Dem Struct-Namen: productProduct
  • Allen Feldnamen: name, price, stock
  • Allen Funktionsnamen: totalValue, displayInfo
  • Allen Feldreferenzen innerhalb der Funktionen

Spickzettel

In Go bestimmt der erste Buchstabe eines Namens dessen Sichtbarkeit:

  • Großbuchstabe = Exportiert (zugänglich aus anderen Paketen)
  • Kleinbuchstabe = Nicht exportiert (privat für das Paket)

Exportierte Namen:

type User struct {
    Name  string  // Exportiertes Feld
    Email string  // Exportiertes Feld
}

func CreateUser(name string) User { // Exportierte Funktion
    return User{Name: name}
}

Nicht exportierte Namen:

type secret struct {     // Nicht exportierte Struktur
    password string      // Nicht exportiertes Feld
}

func validate() bool {   // Nicht exportierte Funktion
    return true
}

Gemischte Sichtbarkeit:

type Account struct {
    Username string    // Exportiert - überall zugänglich
    Email    string    // Exportiert - überall zugänglich
    password string    // Nicht exportiert - nur innerhalb des Pakets
}

Diese Namenskonvention ersetzt Zugriffsmodifikatoren wie public und private, die in anderen Sprachen vorkommen.

Probier es selbst

package main

import "fmt"

func main() {
    var name string
    var price float64
    var stock int
    fmt.Scan(&name, &price, &stock)

    p := Product{
        Name:  name,
        Price: price,
        Stock: stock,
    }

    fmt.Println(DisplayInfo(p))
    fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung