Home >Backend Development >Golang >How to use the scan method to implement console input
In the Go language, you can use the scan
method to read data from the standard input. The scan
method can read any type of data, including strings, numbers, Boolean values, etc. This article will introduce in detail how to use the scan
method to implement console input.
The basic syntax of the scan
method is as follows:
func Scan(a ...interface{}) (n int, err error)
Read data from the input and store it into the specified parameters . Parameter a
represents the data that needs to be read. Any number of parameters can be passed. Each parameter is a pointer type used to store the input data. The return value n
indicates the number of successfully read parameters, and the return value err
indicates possible errors.
The following is a simple example that demonstrates how to read two integers from the console:
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}) }
Through the above code, we can see the basics of the Scan
method usage. Executing the above code, the program will prompt the user to enter two integers. After the user input is completed, the program will store the two integers into the variables a
and b
, and output the two integers. .
Scan
method has the following characteristics:
Scan
When reading data, the method will automatically ignore the spaces between the data. As shown in the following code:
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}) }
Input the string hello world go
, the program will automatically ignore the spaces between the strings and output these three strings.
Scan
method will wait for the user to enter the carriage return character \n
when reading data, indicating that the input is completed . If the user does not enter a carriage return character, the program will wait for user input. As shown in the following code:
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) }
After inputting the string hello
, the program will not output the result immediately, but waits for the user to enter the carriage return character \n
, the result will be output.
Scan
method will not read newline characters in the input when reading data\n
. For example, when we read a string through the Scan
method, the newline characters \n
in the input string will not be read. As shown in the following code:
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) }
Input the string hello\nworld
, the program will only read the string hello
, not the string Newline character \n
in .
The implementation of the Scan
method is based on the Scanf
function of the fmt
package. The Scanf
method has the following features:
Scanf
method supports formatted input. You can specify the data type to be read through a format string. For example, we can read an integer and a string through the following format string:
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}) }
In the above code, the defined format string "%d %s"
means First read an integer, then read a string, separated by spaces.
Scanf
method supports custom delimiter. By default, the Scanf
method uses spaces as delimiters. The delimiter can be customized through the ScanState
parameter of the Scanf
method. As shown in the following code:
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}) }
In the above code, we create a Scanner
object through the NewScanner
method of the bufio
package, and The separator is customized through the Split
method. In the delimiter function, we use comma as delimiter to parse the input string and store it into variables a
and b
.
Through the introduction of this article, we have learned about the basic syntax and characteristics of the Scan
method and how to implement console input. It should be noted that the Scan
method will not read the newline character \n
into the input when processing the input. In addition, the Scanf
method supports custom delimiters and formatted input, which can handle console input more flexibly.
The above is the detailed content of How to use the scan method to implement console input. For more information, please follow other related articles on the PHP Chinese website!