Strukturen in Golang

Strukturen in Golang sind eine der am häufigsten verwendeten und eine Möglichkeit, benutzerdefinierte Typen zu erstellen.

In diesem Abschnitt werde ich alle Grundlagen zu Strukturen und deren Verwendung in Ihren Go-Programmen anhand einiger Beispiele behandeln.

Lass uns anfangen!

Einführung

EIN Struktur ist eine Sammlung mehrerer Datenfelder, deren definierte Datentypen gruppiert sind. Sie sind nützlich, um Daten zu gruppieren, um benutzerdefinierte Datensätze zu bilden. Eine Struktur besteht sowohl aus integrierten als auch aus benutzerdefinierten Typen (Struktur selbst ist ein benutzerdefinierter Typ).

Strukturen in Golang sind veränderbar, dh sie können im gesamten Programm geändert werden.

Strukturen helfen bei der Verbesserung der allgemeinen Codequalität, indem sie es uns ermöglichen, komplexe Datenstrukturen über mehrere Module hinweg zu erstellen und zu übergeben. Stellen Sie sich vor, Sie übergeben 10 Parameter an eine Funktion, Sie werden bald vor dem Code davonlaufen. Genau aus diesem Grund sind Strukturen nützlich. Anstelle von 10 Parametern übergeben Sie jetzt einfach eine einzelne Struktur an diese Funktion.

Eine Struktur wird mit zwei Schlüsselwörtern deklariert – Typ und Struktur. Es ist mit geschweiften Klammern umschlossen (genau wie Klassen in Java) – die eine Reihe von Feldern enthalten, die einen definierten Typ und einen Bezeichner (Namen) haben. Wir besprechen die Implementierungsdetails im nächsten Abschnitt.

Wenn Sie aus dem Bereich der objektorientierten Programmierung (OOP) kommen, können Sie sich Struct als Klasse vorstellen, jedoch ohne Vererbung.

Strukturen deklarieren

Nachdem Sie nun verstanden haben, was eine Struktur ist und warum sie verwendet wird, ist es an der Zeit zu lernen, wie Strukturen deklariert werden. Das Grundgerüst einer Struktur sieht aus wie –

type name_of_struct struct { 
     field1 data_type_field1 
     field2 data_type_field2 
 }

Typ und Struktur sind hier Schlüsselwörter, während die Struktur mehrere Felder mit ihrem definierten Datentyp enthält.

  So passen Sie Google Formulare mit Designs, Bildern und Schriftarten an

Sehen wir uns ein Beispiel an –

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
}

func main() {
	var user User
	fmt.Println(user)
}

Hier definieren wir eine Benutzerstruktur, die aus String-, Int- und Float32-Feldern besteht. In main() deklarieren wir unser Struct als user und drucken es aus! Die Ausgabe, die wir erhalten, ist Null/leerer Wert von struct, da wir sie noch nicht initialisiert haben! Das Null Wert ist im Grunde Nullwerte jedes Feldes.

{ 0 0}

Strukturen initialisieren

Im vorherigen Abschnitt haben wir gelernt, wie man Strukturen deklariert. Jetzt möchten wir ihnen Werte initialisieren oder zuweisen. Sehen Sie sich den Code unten an, um zu erfahren, wie wir das machen –

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
}

func main() {
	// With field names
	user1 := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
	}
	
	// Without field names
	user2 := User{"Nidhi", 21, 1000.0}
	
	fmt.Println(user1)
	fmt.Println(user2)
}

Der Code selbst erklärt, wie wir zwei Strukturen mit und ohne Feldnamen initialisieren. Hier wird die Ausgabe sein –

{Mohit 24 100}
 {Nidhi 21 1000}

Wenn im obigen Fall eines der Felder nicht initialisiert ist, dann wird dieses Feld standardmäßig auf seinen Nullwert gesetzt.

user1 := User{
	name:        "Mohit",
	age:         24,
}

 // Output - { Mohit 24 0.0 }

Es gibt eine weitere Möglichkeit, Strukturen mit dem neuen Schlüsselwort zu erstellen. Wir werden uns im nächsten Abschnitt ansehen, wie man es verwendet.

  Die 7 besten Tools zur Überwachung und Prüfung der Serverkonfiguration

Zugriff auf Felder einer Struktur

Jetzt wissen wir, wie man Strukturen erstellt und initialisiert, sehen wir uns an, wie man auf die Felder einer Struktur zugreift. Dafür stellt uns Golang den Punktoperator zur Verfügung. Um mit dem vorherigen Beispiel fortzufahren, greifen wir auf die Felder Name und Alter zu und drucken sie aus.

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
}

func main() {
	// With field names
	user := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
	}

	fmt.Println(user.name)
	fmt.Println(user.age)
	fmt.Println(user.bankBalance)
}

Hier verwenden wir struct_name.field_name, um auf Felder in einer Struktur zuzugreifen. Die Ausgabe des obigen Codes wird sein –

Mohit
 24
 100

Wie bereits erwähnt, können wir Strukturen mit dem neuen Schlüsselwort erstellen. Mal sehen wie –

user := new(User)
 user.name = "Mohit"
 user.age = 24
 user.bankBalance = 100.0

 fmt.Println(user)

 // Output - &{Mohit 24 100}

Das Schlüsselwort new gibt den Zeiger auf die initialisierte Struktur zurück. In Golang müssen Sie den Zeiger nicht explizit dereferenzieren, aber fmt.Println(*user) würde zu derselben Ausgabe führen.

Verschachtelte Strukturen

Strukturen in golang können auch andere benutzerdefinierte Typen enthalten. Eine Struktur kann also andere verschachtelte Strukturen enthalten.

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
	roleDetails RoleDetails
}

type RoleDetails struct {
	position string
	team     string
}

func main() {
	roleDetailForMohit := RoleDetails{
		position: "Software Engineer",
		team:     "Transport",
	}
	user := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
		roleDetails: roleDetailForMohit,
	}

	fmt.Println(user)
}

Im obigen Code haben wir die RoleDetails-Struktur als Teil der Benutzerstruktur. Die Ausgabe wird sein –

{Mohit 24 100 {Software Engineer Transport}}

Wenn Sie auf roleDetails zugreifen möchten, können Sie dies mit demselben Punktoperator tun –

  So teilen Sie eine Google Docs-, Tabellen- oder Präsentationsdatei als Webseite

user.roleDetails.position

Strukturgleichheit

Zwei Strukturen sind gleich, wenn jedes ihrer Felder gleich ist (sowohl eingebaute als auch benutzerdefinierte), aber nicht alle Datentypen vergleichbar sind. (Karte ist nicht direkt vergleichbar). Sehen wir uns ein Beispiel an, um die Gleichheit zu demonstrieren.

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
}

func main() {
	user1 := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
	}
	user2 := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
	}
	user3 := User{
		name:        "Nidhi",
		age:         21,
		bankBalance: 1000.0,
	}

	if user1 == user2 {
		fmt.Println("user1 and user2 are equal")
	} else {
		fmt.Println("user1 and user2 are not equal")
	}

	if user1 == user3 {
		fmt.Println("user1 and user3 are equal")
	} else {
		fmt.Println("user1 and user3 are not equal")
	}
}

Leere und nullwertige Strukturen sind gleich. Die Reihenfolge der Felder spielt keine Rolle, im Grunde sollte jedes Feld übereinstimmen, um Gleichheit zu gewährleisten. Die Ausgabe für den obigen Code ist –

user1 and user2 are equal
user1 and user3 are not equal

Fazit

Genial!

Jetzt können Sie Strukturen in Golang verwenden. Wir haben alle Grundlagen wie Deklaration, Initialisierung und Zugriff auf Struct-Felder behandelt. Wir haben uns auch angesehen, wie man zwei Strukturen vergleicht und sogar eine verschachtelte Struktur implementiert. Hier sind einige Ressourcen, um mehr über Strukturen zu erfahren –

Es gibt noch viel mehr über Strukturen zu lernen, aber für den Moment ist es ein guter Anfang. Ich hoffe, Sie haben etwas Neues gelernt!

Erkunden Sie weiter. Lerne weiter!