一文了解 Go fmt 标准库输入函数的使用

简介: 本篇文章对 fmt 标准库的常用输入函数进行了介绍。输入函数分三类介绍,第一类是从文件获取输入的内容,第二类是从标准输入获取输入的内容,第三类是从字符串里获取输入的内容。并给出简单的示例代码。

耐心和持久胜过激烈和狂热。

哈喽大家好,我是陈明勇,本文分享的内容是 Go fmt 标准库输入函数的使用。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

fmt 输入函数

函数 描述
Fscan(r io.Reader, a ...any) (n int, err error) 从 r 中读取内容,以空格或换行符为分隔符,按顺序依次赋值给不同参数
Fscanf(r io.Reader, format string, a ...any) (n int, err error) 从 r 中读取内容,以空格为分隔符,将分割后的内容存储到由格式决定的不同参数中。r 中存在的换行符必须与格式中的换行符相匹配
Fscanln(r io.Reader, a ...any) (n int, err error) 类似于 Fscan 函数,不同点是遇到换行符后停止读取,最后一项内容后面必须有换行符或 EOF
Scan(a ...any) (n int, err error) 从标准输入读取内容,以空格或换行符为分隔符,按顺序依次赋值给不同参数
Scanf(format string, a ...any) (n int, err error) 从标准输入读取内容,以空格为分隔符,将分割后的内容存储到由格式决定的不同参数中。标准输入中的换行符必须与格式中的换行符相匹配。特殊情况是 %c 占位符可以接收空格或换行符等
Scanln(a ...any) (n int, err error) 类似于 Scan 函数,不同点是遇到换行符后停止读取,最后一项内容后面必须有换行符或 EOF
Sscan(str string, a ...any) (n int, err error) 从字符串中读取内容,以空格或换行符为分隔符,按顺序依次赋值给不同参数
Sscanf(str string, format string, a ...any) (n int, err error) 从字符串中读取内容,以空格为分隔符,将分割后的内容存储到由格式决定的不同参数中。字符串中的换行符必须与格式中的换行符相匹配
Sscanln(str string, a ...any) (n int, err error) 类似于 Sscan 函数,不同点是遇到换行符后停止读取,字符串最后面必须有换行符或 EOF

Fscan、Fscanf、Fscanln

  • Fscan
func main() {
    file, err := os.Open("./test.txt")
    if err != nil {
  return
    }
    defer file.Close()
    var num1, num2 int
    _, err = fmt.Fscan(file, &num1, &num2)
    if err != nil {
      return
    }
    fmt.Println(num1, num2) // 123 456
}
复制代码
  • ./test.txt 的内容为:123 456
  • Fscan 函数通过空格或换行符分隔内容并赋值给变量,因此使用 num1num2 变量接收分隔后的内容 123456
  • 必须将 num1num2 的地址传递进去,而不是值传递。
  • Fscanf
import (
    "fmt"
    "os"
)
func main() {
    file, err := os.Open("./test.txt")
    if err != nil {
  return
    }
    defer file.Close()
    var num1, num2 int
    _, err = fmt.Fscanf(file, "%d%d", &num1, &num2)
    if err != nil {
      return
    }
    fmt.Println(num1, num2) // 123 456
}
复制代码
  • 通过占位符 %d,将文件里的内容赋值给 num1num2 变量。
  • Fscanln
import (
    "fmt"
    "os"
)
func main() {
    file, err := os.Open("./test.txt")
    if err != nil {
  return
    }
    defer file.Close()
    var num1, num2 int
    _, err = fmt.Fscanln(file, &num1, &num2)
    if err != nil {
  return
    }
    fmt.Println(num1, num2) // 123 456
}
复制代码
  • FscanlnFscan 类似,但是遇到换行符停止扫描,如果所扫描到的内容数量与变量数量不一致,将会返回 error

Scan、Scanf、Scanln

  • Scan
import "fmt"
func main() {
    var name string
    fmt.Println("请输入你的姓名:")
    fmt.Scan(&name)
    fmt.Println(name) // 小明
}
复制代码
  • 运行结果:
请输入你的姓名:
小明
小明
复制代码
  • 使用 name 变量接收输入的值
  • Scanf
import "fmt"
func main() {
    var name string
    var age int
    fmt.Println("请输入你的姓名和性别:")
    fmt.Scanf("%s%d", &name, &age)
    fmt.Println(name, age) // 小明
}
复制代码
  • 运行结果:
请输入你的姓名和性别:
小明 18
小明 18
复制代码
  • 使用占位符 %s%d 分别指定将字符串和整型的数据赋值给 nameage
  • Scanln
import "fmt"
func main() {
    var name string
    fmt.Println("请输入你的姓名:")
    fmt.Scanln(&name)
    fmt.Println(name) // 小明
}
复制代码
  • Scan 是类似的,只不过它遇到换行符后就停止扫描。

Sscan、Sscanf、Sscanln

import "fmt"
func main() {
    var name string
    var age int
    fmt.Sscan("小明 20", &name, &age)
    fmt.Println(name, age) // 小明 20
    fmt.Sscanf("小红 18", "%s%d", &name, &age)
    fmt.Println(name, age) // 小红 18
    fmt.Sscanln("小刚 21", &name, &age)
    fmt.Println(name, age) // 小刚 21
}
复制代码

这三个输入函数和上面介绍的类似,只不过这三个是从字符串里面读取的内容。

小结

本篇文章对 fmt 标准库的常用输入函数进行了介绍。输入函数分三类介绍,第一类是从文件获取输入的内容,第二类是从标准输入获取输入的内容,第三类是从字符串里获取输入的内容。并给出简单的示例代码。

目录
相关文章
|
11天前
|
Go API 数据安全/隐私保护
Go语言标准库概览:构建高效、可靠的软件开发基石
【2月更文挑战第8天】Go语言标准库是Go语言生态系统的重要组成部分,它为开发者提供了一系列高效、可靠的工具和函数,帮助开发者构建高质量的软件应用。本文将对Go语言标准库进行概览,介绍其组成特点、设计哲学以及使用场景与优势,帮助读者更好地理解和应用Go语言标准库。
|
11天前
|
Cloud Native 安全 Java
云原生系列Go语言篇-标准库Part 2
使用Go进行开发的最大优势之一是其标准库。与Python类似,Go也采取了“内置电池”的理念,提供了构建应用程序所需的许多工具。由于Go是一种相对较新的语言,它附带了一个专注于现代编程环境中遇到的问题的库。
35 0
|
7月前
|
JSON Go 数据格式
Go 1.21.0 中新增的结构化日志记录标准库 log/slog 详解
Go 1.21.0 中新增的结构化日志记录标准库 log/slog 详解
82 0
|
7月前
|
Go
Go 使用标准库 net/http 包构建服务器
Go 使用标准库 net/http 包构建服务器
28 0
|
11天前
|
JSON Cloud Native Java
云原生系列Go语言篇-标准库Part 2
REST API将JSON奉为服务之通信的标准方式,Go 的标准库内置对Go 数据类型与 JSON 之间进行转换的支持。marshaling一词表示从 Go 数据类型转为另一种编码,而unmarshaling表示转换为 Go 数据类型。
37 0
|
11天前
|
SQL 开发框架 .NET
你确定不学?Go标准库之 text/template
你确定不学?Go标准库之 text/template
11 2
|
11天前
|
安全 Go
Golang深入浅出之-Go语言标准库中的文件读写:io/ioutil包
【4月更文挑战第27天】Go语言的`io/ioutil`包提供简单文件读写,适合小文件操作。本文聚焦`ReadFile`和`WriteFile`函数,讨论错误处理、文件权限、大文件处理和编码问题。避免错误的关键在于检查错误、设置合适权限、采用流式读写及处理编码。遵循这些最佳实践能提升代码稳定性。
24 0
|
11天前
|
中间件 Go API
Golang深入浅出之-Go语言标准库net/http:构建Web服务器
【4月更文挑战第25天】Go语言的`net/http`包是构建高性能Web服务器的核心,提供创建服务器和发起请求的功能。本文讨论了使用中的常见问题和解决方案,包括:使用第三方路由库改进路由设计、引入中间件处理通用逻辑、设置合适的超时和连接管理以防止资源泄露。通过基础服务器和中间件的代码示例,展示了如何有效运用`net/http`包。掌握这些最佳实践,有助于开发出高效、易维护的Web服务。
32 1
|
11天前
|
Java 测试技术 Go
Go语言标准库进阶应用与最佳实践:提升代码质量与性能
【2月更文挑战第8天】在掌握了Go语言标准库的基础应用后,如何进一步发掘其潜力,提升代码质量和性能,是每位Go语言开发者所关心的问题。本文将探讨Go语言标准库的进阶应用与最佳实践,包括标准库与其他库的协同使用、性能优化与内存管理、错误处理与异常捕获、标准库在实际项目中的应用案例,以及推荐的最佳实践与编程规范。通过深入了解这些内容,开发者能够更好地利用Go语言标准库,提升代码质量与性能,构建出更加高效、可靠的软件应用。
|
11天前
|
算法 安全 Go
Go语言标准库核心模块详解:构建高效应用的基石
【2月更文挑战第8天】Go语言标准库中的核心模块为开发者提供了构建高效应用所需的基础功能和工具。本文将深入探讨Go语言标准库中的几个核心模块,包括容器与集合、并发与并行、输入输出、时间与日期、字符串处理以及加密与安全,帮助读者更好地理解和应用这些核心模块,为构建高效应用打下坚实基础。