Maison >développement back-end >Golang >Comment utiliser la méthode d'analyse pour implémenter la saisie de la console
En langage Go, vous pouvez utiliser la méthode scan
pour lire les données à partir de l'entrée standard. La méthode scan
peut lire tout type de données, y compris des chaînes, des nombres, des valeurs booléennes, etc. Cet article présentera en détail comment utiliser la méthode scan
pour implémenter la saisie dans la console. scan
方法从标准输入中读取数据。scan
方法可以读取任意类型的数据,包括字符串、数字、布尔值等等。本文将详细介绍如何使用scan
方法实现控制台输入。
scan
方法的基本语法如下:
func Scan(a ...interface{}) (n int, err error)
从输入中读取数据,并将其存储到指定的参数中。参数a
表示需要读取的数据,可以传递任意个参数,每个参数都是一个指针类型,用于存储输入的数据。返回值n
表示成功读取的参数个数,返回值err
表示可能出现的错误。
下面是一个简单的例子,演示如何从控制台中读取两个整数:
func main() { var a, b int fmt.Print("请输入两个整数:") n, err := fmt.Scan(&a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []int{a, b}) }
通过上面的代码,我们可以看到Scan
方法的基本用法。执行上面的代码,程序将提示用户输入两个整数,用户输入完成后,程序会将这两个整数存储到变量a
和b
中,并输出这两个整数。
Scan
方法有以下几个特性:
Scan
方法在读取数据时,会自动忽略掉数据之间的空格。如下面的代码所示:
func main() { var a, b, c string fmt.Print("请输入三个字符串:") n, err := fmt.Scan(&a, &b, &c) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []string{a, b, c}) }
输入字符串hello world go
,程序将自动忽略掉字符串之间的空格,并输出这三个字符串。
Scan
方法在读取数据时,会等待用户输入回车符n
,表示输入完成。如果用户没有输入回车符,程序将一直等待用户输入。如下面的代码所示:
func main() { var s string fmt.Print("请输入一个字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, s) }
输入字符串hello
后,程序并不会立即输出结果,而是等待用户输入回车符n
,才会输出结果。
Scan
方法在读取数据时,不会读取输入中的换行符n
。比如,当我们通过Scan
方法读取一个字符串时,输入字符串中的换行符n
不会被读取。如下面的代码所示:
func main() { var s string fmt.Print("请输入一个字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, s) }
输入字符串hellonworld
,程序只会读取到字符串hello
,不会读取到字符串中的换行符n
。
Scan
方法的实现是基于fmt
包的Scanf
函数。Scanf
方法有以下几个特性:
Scanf
方法支持格式化输入。可以通过格式化字符串指定需要读取的数据类型。比如,我们可以通过以下格式化字符串读取一个整数和一个字符串:
func main() { var a int var b string fmt.Print("请输入一个整数和一个字符串:") n, err := fmt.Scanf("%d %s", &a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []interface{}{a, b}) }
上面的代码中,定义的格式化字符串"%d %s"
表示先读取一个整数,再读取一个字符串,中间用空格分隔。
Scanf
方法支持自定义分隔符。默认情况下,Scanf
方法以空格作为分隔符。可以通过Scanf
方法的ScanState
参数,自定义分隔符。如下面的代码所示:
func main() { var a, b string fmt.Print("请输入两个字符串,用逗号分隔:") s := bufio.NewScanner(os.Stdin) s.Split(func(data []byte, atEOF bool) (adv int, token []byte, err error) { for i := 0; i < len(data); i++ { if data[i] == ',' { return i + 1, data[:i], nil } } return 0, data, bufio.ErrFinalToken }) if s.Scan() { a = s.Text() } if s.Scan() { b = s.Text() } fmt.Printf("您输入的字符串是:%v\n", []string{a, b}) }
上面的代码中,我们通过bufio
包的NewScanner
方法创建一个Scanner
对象,并通过Split
方法自定义了分隔符。在分隔函数中,我们将逗号作为分隔符,以解析输入字符串,并将其存储到变量a
和b
中。
通过本文的介绍,我们了解了Scan
方法的基本语法、特性以及如何实现控制台输入。需要注意的是,Scan
方法在处理输入时,不会将换行符n
读取到输入中。另外,Scanf
scan
est la suivante : 🎜rrreee🎜Lire les données de l'entrée et les stocker dans les paramètres spécifiés. Le paramètre a
représente les données qui doivent être lues. N'importe quel nombre de paramètres peut être transmis. Chaque paramètre est un type de pointeur utilisé pour stocker les données d'entrée. La valeur de retour n
indique le nombre de paramètres lus avec succès, et la valeur de retour err
indique des erreurs possibles. 🎜🎜Ce qui suit est un exemple simple qui montre comment lire deux entiers depuis la console : 🎜rrreee🎜Grâce au code ci-dessus, nous pouvons voir l'utilisation de base de la méthode Scan
. En exécutant le code ci-dessus, le programme invitera l'utilisateur à saisir deux entiers. Une fois la saisie utilisateur terminée, le programme stockera les deux entiers dans les variables a
et b
. et affichez ces deux entiers. 🎜Scan
présente les caractéristiques suivantes : 🎜Scan
dans When. lors de la lecture des données, les espaces entre les données seront automatiquement ignorés. Comme le montre le code suivant : 🎜rrreee🎜Entrez la chaîne hello world go
, le programme ignorera automatiquement les espaces entre les chaînes et affichera ces trois chaînes. 🎜Scan
lit les données, elle attendra que l'utilisateur saisisse le caractère de retour chariot n
, indiquant que la saisie est terminée. Si l'utilisateur ne saisit pas de caractère de retour chariot, le programme attendra la saisie de l'utilisateur. Comme le montre le code suivant : 🎜rrreee🎜Après avoir saisi la chaîne hello
, le programme n'affichera pas le résultat immédiatement, mais attendra que l'utilisateur entre le caractère de retour chariot n
. Résultats de sortie. 🎜Scan
ne lira pas le caractère de nouvelle ligne n
dans l'entrée lors de la lecture des données. Par exemple, lorsque nous lisons une chaîne via la méthode Scan
, le caractère de nouvelle ligne n
dans la chaîne d'entrée ne sera pas lu. Comme le montre le code suivant : 🎜rrreee🎜Entrez la chaîne hellonworld
, le programme lira uniquement la chaîne hello
et ne lira pas le caractère de nouvelle ligne dans la chaîne n
. 🎜Scan
est basée sur la fonction Scanf
du package fmt
. La méthode Scanf
présente les fonctionnalités suivantes : 🎜Scanf
prend en charge l'entrée formatée. Vous pouvez spécifier le type de données à lire via une chaîne de format. Par exemple, nous pouvons lire un entier et une chaîne via la chaîne de format suivante : 🎜rrreee🎜Dans le code ci-dessus, la chaîne de format définie "%d %s"
signifie lire d'abord Un entier, puis lire une chaîne, séparée par des espaces. 🎜Scanf
prend en charge le délimiteur personnalisé. Par défaut, la méthode Scanf
utilise des espaces comme délimiteurs. Vous pouvez personnaliser le délimiteur via le paramètre ScanState
de la méthode Scanf
. Comme le montre le code suivant : 🎜rrreee🎜Dans le code ci-dessus, nous créons un objet Scanner
via la méthode NewScanner
du package bufio
, et pass La méthode Split
personnalise le séparateur. Dans la fonction délimiteur, nous utilisons la virgule comme délimiteur pour analyser la chaîne d'entrée et la stocker dans les variables a
et b
. 🎜Scan
et comment implémenter la saisie dans la console. Il convient de noter que la méthode Scan
ne lit pas le caractère de nouvelle ligne n
dans l'entrée lors du traitement de l'entrée. De plus, la méthode Scanf
prend en charge les délimiteurs personnalisés et les entrées formatées, qui peuvent gérer les entrées de la console de manière plus flexible. 🎜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!