Analyse des nombres à partir d'une entrée standard dans Go
Lorsque vous travaillez avec plusieurs entrées numériques, Go permet aux développeurs d'utiliser plusieurs variables pour capturer des valeurs individuelles. Cependant, que se passe-t-il si vous souhaitez simplifier ce processus et stocker tous les nombres dans un seul tableau ou tranche ?
Considérez l'extrait de code suivant :
numbers := make([]int, 2) fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])
Ce code lit efficacement deux nombres et stocke les dans la tranche de chiffres. Cependant, si vous disposez d'un grand nombre d'entrées, cette approche peut devenir verbeuse.
Pouvez-vous lire des nombres directement dans une tranche à l'aide de fmt.Fscan() ?
Malheureusement, le package fmt ne prend pas en charge nativement la numérisation en tranches. Pour surmonter cette limitation, vous pouvez créer une fonction utilitaire personnalisée pour regrouper les adresses de tous les éléments de la tranche dans un tableau d'interfaces :
func packAddrs(n []int) []interface{} { p := make([]interface{}, len(n)) for i := range n { p[i] = &n[i] } return p }
Cette fonction parcourt la tranche, créant un tableau de pointeurs vers chaque élément. .
Utilisation de la fonction packAddrs() pour scanner une tranche
Avec la fonction packAddrs(), vous peut maintenant numériser une tranche comme ceci :
numbers := make([]int, 2) n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...) fmt.Println(numbers, n, err)
La fonction packAddrs() convertit la tranche en un tableau d'interfaces, permettant à fmt.Fscan() de numériser chaque élément.
Exemple d'utilisation de fmt.Sscan() pour les tests
numbers := make([]int, 5) n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...) fmt.Println(numbers, n, err)
Dans cet exemple, je teste le code en utilisant fmt.Sscan(). Il prend une chaîne en entrée et renvoie les valeurs numérisées. Le résultat de ce code est :
[1 3 5 7 9] 5 <nil>
Cela montre comment vous pouvez lire efficacement plusieurs nombres dans une tranche en utilisant la fonction utilitaire packAddrs().
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!