Heim > Backend-Entwicklung > Golang > Wie weist man einem Bool-Zeiger in Go-Struct-Literalen „True' zu?

Wie weist man einem Bool-Zeiger in Go-Struct-Literalen „True' zu?

Susan Sarandon
Freigeben: 2024-12-08 10:49:10
Original
940 Leute haben es durchsucht

How to Assign True to a Bool Pointer in Go Struct Literals?

Zeigerzuweisung in Strukturliteralen: Eine kurze Anleitung

In Go kann die Zuweisung von Werten zu Zeigern innerhalb von Strukturliteralen schwierig sein. Insbesondere das Setzen eines Bool-Zeigers auf „true“ kann eine Problemumgehung erfordern.

Betrachten Sie die folgende Funktion, die einen Bool-Zeiger akzeptiert:

import "fmt"

func main() {
    fmt.Println("Hello, playground")
    check(handler{is: new(bool)})
}

type handler struct{
    is *bool
}

func check(is handler){}
Nach dem Login kopieren

Um das is-Feld im Strukturliteral auf „true“ zuzuweisen, Man könnte annehmen, dass eine einfache Notation existiert:

handler{is: &true}  // This is invalid
Nach dem Login kopieren

Leider ist dies keine gültige Go-Syntax. Um den Bool-Zeiger auf „true“ zu setzen, ist eine Problemumgehung erforderlich.

Erstellen eines Slice-Wrappers

Eine Methode besteht darin, ein Slice zu erstellen, das einen einzelnen Bool-Wert von „true“ enthält, und sein erstes Element zu indizieren:

h := handler{is: &[]bool{true}[0]}
fmt.Println(*h.is) // Prints true
Nach dem Login kopieren

Auf diese Weise können Sie zwar den Zeiger auf „true“ setzen, es wird jedoch unnötigerweise ein Slice-Array erstellt, das im Speicher verbleibt, bis die Adresse auf den ersten Wert gesetzt wird Element wird gelöscht.

Hilfsfunktionen verwenden

Eine sauberere Lösung besteht darin, eine Hilfsfunktion zu erstellen, die einen Zeiger auf eine bool-Variable zurückgibt, die auf true initialisiert ist:

func newTrue() *bool {
    b := true
    return &b
}
Nach dem Login kopieren

Dies Die Funktion kann dann im Strukturliteral verwendet werden:

h := handler{is: newTrue()}
fmt.Println(*h.is) // Prints true
Nach dem Login kopieren

Anonyme Funktionen und Einzeiler

Andere Optionen, um den Zeiger auf true zu setzen, umfassen anonyme Funktionen:

h := handler{is: func() *bool { b := true; return &b }()}
fmt.Println(*h.is) // Prints true
Nach dem Login kopieren

Oder Variante:

h := handler{is: func(b bool) *bool { return &b }(true)}
Nach dem Login kopieren

Diese ermöglichen eine prägnante Syntax, können es aber sein weniger lesbar als der Hilfsfunktionsansatz.

Fazit

Beim Setzen eines Bool-Zeigers In Strukturliteralen auf „true“ zu setzen mag wie eine einfache Aufgabe erscheinen, sie erfordert jedoch eine bestimmte Syntax oder die Verwendung einer Problemumgehung. Die Kenntnis dieser Methoden ermöglicht es Go-Programmierern, Zeigern in verschiedenen Situationen effektiv Werte zuzuweisen.

Das obige ist der detaillierte Inhalt vonWie weist man einem Bool-Zeiger in Go-Struct-Literalen „True' zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage