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
Susan SarandonOriginal
2024-12-08 10:49:10923Durchsuche

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){}

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

handler{is: &true}  // This is invalid

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

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
}

Dies Die Funktion kann dann im Strukturliteral verwendet werden:

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

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

Oder Variante:

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

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!

Stellungnahme:
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