Maison >développement back-end >Golang >Comment attribuer True à un pointeur bool dans les littéraux Go Struct ?

Comment attribuer True à un pointeur bool dans les littéraux Go Struct ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-08 10:49:10923parcourir

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

Assignation de pointeurs dans les littéraux de structure : un guide concis

Dans Go, attribuer des valeurs aux pointeurs dans les littéraux de structure peut être délicat. Plus précisément, définir un pointeur bool sur true peut nécessiter une solution de contournement.

Considérez la fonction suivante qui accepte un pointeur booléen :

import "fmt"

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

type handler struct{
    is *bool
}

func check(is handler){}

Pour attribuer le champ is à true dans le littéral de structure, on pourrait supposer qu'une notation simple existe :

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

Malheureusement, ce n'est pas une syntaxe Go valide. Pour définir le pointeur bool sur true, une solution de contournement est requise.

Création d'un wrapper de tranche

Une méthode consiste à créer une tranche contenant une seule valeur booléenne true et à indexer son premier élément :

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

Bien que cela vous permette de définir le pointeur sur true, cela crée inutilement un tableau de tranches qui restera en mémoire jusqu'à l'adresse de son premier élément est supprimé.

Utilisation des fonctions d'assistance

Une solution plus propre consiste à créer une fonction d'assistance qui renvoie un pointeur vers une variable bool initialisée à true :

func newTrue() *bool {
    b := true
    return &b
}

Cette fonction peut ensuite être utilisé dans la structure littérale :

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

Fonctions anonymes et One-Liners

D'autres options pour définir le pointeur sur true incluent des fonctions anonymes :

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

Ou une variante :

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

Celles-ci permettent une syntaxe concise mais peuvent être moins lisible que l'approche de la fonction d'assistance.

Conclusion

Lors de la définition d'un pointeur booléen sur true Les littéraux de structure peuvent sembler une tâche simple, ils nécessitent une syntaxe spécifique ou l'utilisation d'une solution de contournement. Connaître ces méthodes permet aux programmeurs Go d'attribuer efficacement des valeurs aux pointeurs dans diverses situations.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn