Maison >développement back-end >Golang >Comment puis-je lire efficacement plusieurs numéros dans une tranche Go à l'aide de fmt.Fscan ?

Comment puis-je lire efficacement plusieurs numéros dans une tranche Go à l'aide de fmt.Fscan ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-16 21:53:15617parcourir

How Can I Efficiently Read Multiple Numbers into a Go Slice Using fmt.Fscan?

Lecture de nombres dans des tranches à l'aide de fmt.Fscan

Pour lire plusieurs nombres dans un tableau ou une tranche dans Go à l'aide de fmt.Fscan, il est pratique courante de déclarer des variables individuelles et de fournir leurs adresses comme arguments :

numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])

Cependant, il n'est pas possible de directement passez la tranche elle-même en tant que paramètre à fmt.Fscan. Pour simplifier ce processus, vous pouvez créer une fonction utilitaire qui regroupe les adresses des éléments de tranche :

func packAddrs(n []int) []interface{} {
    p := make([]interface{}, len(n))
    for i := range n {
        p[i] = &n[i]
    }
    return p
}

En utilisant cette fonction, vous pouvez désormais numériser une tranche entière avec fmt.Fscan :

numbers := make([]int, 2)
n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...) // ... unpacks the slice addresses
fmt.Println(numbers, n, err)

Par exemple, considérons l'entrée de test suivante :

1 3 5 7 9

Utilisation de fmt.Sscan pour les tests fins :

numbers := make([]int, 5)
n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...)
fmt.Println(numbers, n, err) // Output: [1 3 5 7 9] 5 <nil>

Cela montre comment lire efficacement plusieurs nombres dans une tranche à l'aide de fmt.Fscan.

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