如果❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。更多往期文章在我的个人博客
Golang 本身十分轻量级,运行效率极高,同时对并发编程有着原生的支持,从而能更好的利用多核处理器。 这使得Golang对微服务开发具有先天的优势
常见的程序触发形式有api 调用,命令行执行。而在命令行执行中,用户输入执行参数的获取至关重要。
下面就来详细讲一讲
Golang 语言fmt包下有fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,可以在程序运行过程中从标准输入获取用户的输入。
fmt.Scan
函数调用语法:
func Scan(a …interface{}) (n int, err error)
- Scan从命令行输入扫描文本,读取由- 空白符分隔的值 传递到本- 函数参数中,换行符视为空白符。
- 函数返回成功扫描数据个数和执行遇到的任何错误。如果读取的数据个数比参数少,会抛出错误。
具体代码示例如下:
func main() {
    var (
        name    string
        age     int
        is_marry bool
    )
    
    fmt.Scan(&name, &age, &is_marry)
    fmt.Printf("获取结果 name:%s age:%d is_marry:%t \n", name, age, is_marry)
}
将上面的代码编译后在终端执行,在终端依次输入韩韩、18、false使用空格分隔。
$ ./scan_demo 
韩韩 18 false
获取结果 name:韩韩 age:18 is_marry:false
fmt.Scan从命令行输入中扫描用户输入的数据,将以空白符分隔的数据分别存入指定的参数。
fmt.Scanf
函数调用语法:
func Scanf(format string, a …interface{}) (n int, err error)
- Scanf从命令行输入扫描文本,根据- format参数指定格式去读取由- 空白符分隔的值保存到传递给本函数参数中。
- 函数返回成功扫描数据个数和执行遇到的任何错误。
代码示例如下:
func main() {
    var (
        name    string
        age     int
        is_marry bool
    )
    
    fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &is_marry)
    fmt.Printf("扫描结果 name:%s age:%d is_marry:%t \n", name, age, is_marry)
}
将上面代码编译执行后,在终端按照指定的格式依次输入 韩韩、18、false。
$ ./scan_demo 
1:韩韩 2:18 3:false
获取结果 name:韩韩 age:18 is_marry:false
fmt.Scanf不同于fmt.Scan简单的以空格作为输入数据的分隔符,fmt.Scanf为输入数据指定了具体的输入内容格式,只有按照格式输入数据才会被扫描并存入对应变量。
fmt.Scanln
函数调用语法:
func Scanln(a …interface{}) (n int, err error)
- Scanln类似Scan,它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
- 函数返回成功扫描数据个数和执行遇到的任何错误。
具体代码示例如下:
    func main() {
        var (
            name    string
            age     int
            is_marry bool
        )
        fmt.Scanln(&name, &age, &is_marry)
        fmt.Printf("获取结果 name:%s age:%d is_marry:%t \n", name, age, is_marry)
    }
将上面代码编译执行后,在终端依次输入韩韩、18、false使用空格分隔。
$ ./scan_demo 
韩韩 18 false
获取结果 name:韩韩 age:18 is_marry:false
fmt.Scanln遇到回车就结束扫描了,这个比较常用。
Fscan系列
函数功能分别对应上述 fmt.Scan、fmt.Scanf、fmt.Scanln 函数,
只不过它们并不从命令行输入中读取数据而是从io.Reader中读取数据。
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
Sscan系列
函数功能分别对应上述 fmt.Scan、fmt.Scanf、fmt.Scanln 函数,
只不过它们并不从命令行输入中读取数据而是从 指定字符串 中读取数据。
func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
