„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > GoLang-Strukturen

GoLang-Strukturen

Veröffentlicht am 08.11.2024
Durchsuche:844

GoLang Structs

In Golang sind Strukturen einfache Container für Daten.

  • kann Felder haben
  • keine Methoden angehängt
    • Methoden, die separat definiert und einem Strukturtyp zugeordnet sind.

Das Folgende zeigt einfache Book-Klassenäquivalente in Ruby und GoLang.

class Book
  attr_reader(:title, :author)

  def initalize(title, author)
    @title  = title
    @author = authoer
  end
end

# usage
book = Book.new('Title', 'Jon Snow')
// Equivalent to `class Book` in ruby
type Book struct {
  Title string,
  Author string
}

Instanziieren des GoLang-Typs

Zusammengesetztes Literal

Composite Literal ist eine Syntax zum Erstellen und Initialisieren zusammengesetzter Typen in einem Schritt. Wir können die folgenden Typen instanziieren:

  • Strukturen
  • Arrays
  • Scheiben
  • Karten

Hier weisen wir der Variablen book eine neue Book-Instanz zu

// Composite Literal
book := Book{
  Title: "Title",
  Author: "Author"
}

Neues Schlüsselwort verwenden

Die längere Form besteht darin, das neue Schlüsselwort zu verwenden. Dies ähnelt der Art und Weise, wie wir eine Klasse in Ruby mit book = Book.new(..)

instanziieren würden.

Wir würden die Attribute des Buches (d. h. Titel und Autor) mit = sign zuweisen.

// Using the `new` keyword
book        := new(Book)
book.Title  = "Book Title"
book.Author = "John Snow"

Ohne kurze Variablendeklaration (:=)

Beachten Sie, dass wir im ersten Beispiel das Symbol := verwendet haben?

Es ist syntaktischer Zucker für die folgende ausführliche Art, eine Variable zu deklarieren und ihr einen Wert zuzuweisen.

// Without Short Virable Declaration

// Example 1
var book Book // Declare variable `book` of type `Book`
book.Title = "Book Title" // Assign the value to book variable
book.Author = "John Snow"

// Example 2
var count int
count = 20

Fabrikfunktion

Wir könnten das Factory-Muster auch verwenden, um die Initialisierung der Struktur zu vereinfachen, wenn wir Folgendes benötigen:

  • Zusätzliche Logik hinzufügen
  • Standardwerte hinzufügen

Angenommen, wir möchten, dass jedes erste Zeichen des Buchtitels und der Autoren-Tokens großgeschrieben werden.

// Factory Function
func NewBook(title string, author string) Book {
  return Book{
    Title: titlelise(title), // default logic to "titlelise" 
    Author: titlelist(author)
  }
}

func titlelise(str string) {
  caser := cases.Title(lanaguage.English)
  return caser.String(str)
}

Anhängen einer Funktion an eine Struktur

In Ruby würden wir einfach eine Funktion innerhalb der Klasse definieren. Hier definieren wir eine Funktion namens to_string(), um den Autor des Buchtitels auszugeben.

class Book
  attr_reader(:title, :author)

  def initalize(title, author)
    @title  = title
    @author = authoer
  end

  # new function we added
  def to_string()
    put "#{title} by #{string}"
  end
end

In GoLang würden wir die Funktion „anhängen“, indem wir die Struktur an die Funktion übergeben.

// Equivalent to `class Book` in ruby
type Book struct {
  Title string,
  Author string
}

// Attaching the function to the `struct`
func (book Book) ToString() string {
  return fmt.Sprintf("%s by %s", book.Title, book.Author)
}

// Usage
book := Book{
  Title: "Title",
  Author: "Author"
}

book.ToString()
// => Title by Author

Erklärung von:

func (book Book) ToString() string
Token Beschreibung
func Funktionsschlüsselwort
(Buch Buch) Anhängen der Funktion an den Typ „Book“-Struktur
- book: Variable für den Zugriff auf die Struktur innerhalb der Funktion
- Book: Typ der Struktur
ToString() Name der Funktion
Zeichenfolge Rückgabetyp der Funktion
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/nerdherd/golang-structs-3o0k?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3