Comment définir bool pointeur de vrai dans struct littérale?
J'ai la fonction ci-dessous qui accepte un bool pointeur. Je me demandais si il n'y a aucune notation qui me permet de définir la valeur de la is
champ de true
dans la structure littérale; en gros, sans pour définir un nouvel identifiant (i.e. var x := true ; handler{is: &x} )
package main
import "fmt"
func main() {
fmt.Println("Hello, playground")
check(handler{is: new(bool) })
}
type handler struct{
is *bool
}
func check(is handler){}
Connexes: stackoverflow.com/questions/30716354/...
OriginalL'auteur The user with no hat | 2015-03-02
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire mais il n'est pas optimale:
Fondamentalement, il crée une tranche avec un
bool
de valeurtrue
, des indices de son premier élément et son adresse. Aucune nouvelle variable est créée, mais il y a beaucoup de passe-partout (et la sauvegarde de tableau restera en mémoire jusqu'à ce que l'adresse de son premier élément).Une meilleure solution serait d'écrire une fonction d'aide:
Et de les utiliser:
Vous pouvez aussi le faire avec un one-liner fonction anonyme:
Ou une variante:
De voir toutes vos options, consultez mon autre réponse: Comment dois-je faire un littéral *int64 en Aller?
Ha, j'ai oublié ce truc! (non pas que je voudrais l'utiliser)
Je ne vois pas pourquoi votre cas ne permettent pas à une fonction. Soins de partager plus de détails?
La syntaxe (champs de type) est censé être fournis à une ligne de commande/de générateur. Fournissant une fonction que cli argument n'est pas agréable.
OriginalL'auteur
Pas.
Il n'y a pas de syntaxe pour définir un pointeur vers un type primitif, autre que le zéro de la valeur retournée par
new
. Il en va de même pour les types numériques, et les cordes.Vous avez besoin pour créer une valeur avant de la main pour prendre l'adresse de la, ou de vous créer le pointeur avec une valeur de zéro, et d'assigner une nouvelle valeur après le fait.
OriginalL'auteur
Une des raisons pour lesquelles les pointeurs sont utiles dans le jeu de go ou de n'importe quelle langue pour que la matière, c'est qu'ils nous aider à "passer". Donc, si nous passer quelque chose par référence on peut "changer" de cette chose. Une fonction qui prend un pointeur vers le type bool, bool valeur efficace même après le retour de fonction. C'est la même chose que nous ne voulons pas avec des constantes, c'est à dire. leurs valeurs ne doivent pas changer. D'où cette restriction de sens.
À part les trucs mentionnés par
icza
ci-dessus, souhaitez ajouter un point ici. La plupart du temps nous utilisons des pointeurs vers des booléens plutôt que de booléens directement afin d'utiliser le néant valeur des pointeurs efficacement, ce qui, dans le cas contraire soit vrai ou faux. Si c'EST le cas, alors vous voulez utiliser l'option bool drapeaux directement dans les fonctions, plutôt que d'avoir des pointeurs vers bool ou même une structure d'emballage unique bool pointeur comme indiqué dans votre exemple, en supprimant l'exigence complète d'un struct même.. Maintenant, bien sûr, si la structure est requis pour toute autre raison, vous pouvez très bien utiliser toutes les astuces deicza
ci-dessus.Btw, vous pouvez directement avoir une copie de la valeur booléenne pour l'utilisation de l'adresse comme ci-dessous.
OriginalL'auteur