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
Libérer: 2024-12-08 10:49:10
original
941 Les gens l'ont consulté

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){}
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
}
Copier après la connexion

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

h := handler{is: newTrue()}
fmt.Println(*h.is) // Prints true
Copier après la connexion

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
Copier après la connexion

Ou une variante :

h := handler{is: func(b bool) *bool { return &b }(true)}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal