3

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

 1 year ago
source link: https://blog.51cto.com/chenmingyong/5982196
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

精选 原创

CMY陈明勇 2022-12-31 18:43:03 ©著作权

文章标签 Go golang fmt 输入 文章分类 Go语言 编程语言 yyds干货盘点 阅读数245

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

哈喽大家好,我是陈明勇,今天分享的内容是 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​​ 函数通过空格或换行符分隔内容并赋值给变量,因此使用 ​​num1​​ 和 ​​num2​​ 变量接收分隔后的内容 ​​123​​ ​​456​​。
  • 必须将 ​​num1​​ 和 ​​num2​​ 的地址传递进去,而不是值传递。
  • 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,将文件里的内容赋值给 ​​num1​​ 和 ​​num2​​ 变量。

  • 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
}

​Fscanln​​ 与 Fscan 类似,但是遇到换行符停止扫描,如果所扫描到的内容数量与变量数量不一致,将会返回 error

Scan、Scanf、Scanln

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​​​ 分别指定将字符串和整型的数据赋值给 ​​name​​​ 和 ​​age​​。

  • 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 标准库的常用输入函数进行了介绍。输入函数分三类介绍,第一类是从文件获取输入的内容,第二类是从标准输入获取输入的内容,第三类是从字符串里获取输入的内容。并给出简单的示例代码。

  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK