首页 > 后端开发 > Golang > 如何用 Go 语言进行扫描

如何用 Go 语言进行扫描

Susan Sarandon
发布: 2025-01-05 14:51:44
原创
488 人浏览过

How to Scan in GoLang

在Go(golang)中,fmt包提供了几个用于扫描来自控制台或其他输入源的输入的函数。

对我来说,这些在测试和许多其他领域一直很有用。到目前为止,我在扫描时通常使用 4 个功能。

让我们探索其中的一些,看看如何、为什么以及何时使用它。


1. fmt.扫描

  • 用途:从标准输入(控制台)读取空格分隔的输入。
  • 停止阅读: 在第一个换行符或空格处停止。
  • 多个变量:可以在一次调用中读取多个变量。
  • 返回:成功扫描的项目数量以及错误(如果有)。

示例:

package main

import (
    "fmt"
)

func main() {
    var name string
    var age int
    fmt.Print("Enter your name and age: ")
    fmt.Scan(&name, &age) // Reading input separated by space
    fmt.Printf("Hello %s, you are %d years old.\n", name, age)
}
登录后复制
登录后复制

输入示例:

爱丽丝 25

输出:

Hello Alice, you are 25 years old.
登录后复制
登录后复制
登录后复制

2. fmt.Scanln

  • 用途:读取输入,直到遇到换行符 (n)。
  • 停止阅读:在换行符而不是空格处停止。
  • 多个变量: 可以读取多个变量,但如果先到达换行符就会停止。
  • 返回:成功扫描的项目数量以及错误(如果有)。

示例:

package main

import (
    "fmt"
)

func main() {
    var name string
    var age int
    fmt.Print("Enter your name and age: ")
    fmt.Scanln(&name, &age) // Reads until newline is encountered
    fmt.Printf("Hello %s, you are %d years old.\n", name, age)
}
登录后复制

输入示例:

爱丽丝 25

输出:

Hello Alice, you are 25 years old.
登录后复制
登录后复制
登录后复制

3. fmt.Scanf

  • 用途: 使用格式说明符(如 %s、%d、%f)读取格式化输入。
  • 停止读取:根据指定格式停止。
  • 多个变量:可以使用格式说明符精确控制读取多个变量。
  • 返回:成功扫描的项目数量以及错误(如果有)。

示例:

package main

import (
    "fmt"
)

func main() {
    var name string
    var age int
    fmt.Print("Enter your name and age (formatted): ")
    fmt.Scanf("%s %d", &name, &age) // Reads formatted input
    fmt.Printf("Hello %s, you are %d years old.\n", name, age)
}
登录后复制

输入示例:

爱丽丝 25

输出:

Hello Alice, you are 25 years old.
登录后复制
登录后复制
登录后复制

4. bufio.NewReader(用于高级输入处理)

  • 用途:与fmt相比,提供更高级的输入读取功能。
  • 停止读取: 允许读取整行,包括空格。
  • 多个变量: 将输入读取为单个字符串,然后可以根据需要进一步拆分。
  • 返回: 完整的输入行作为字符串。

示例:

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter your name and age: ")
    input, _ := reader.ReadString('\n') // Reads entire line including spaces
    input = strings.TrimSpace(input)    // Trim newline and spaces
    fmt.Printf("You entered: %s\n", input)
}
登录后复制

输入示例:

爱丽丝 25

输出:

package main

import (
    "fmt"
)

func main() {
    var name string
    var age int
    fmt.Print("Enter your name and age: ")
    fmt.Scan(&name, &age) // Reading input separated by space
    fmt.Printf("Hello %s, you are %d years old.\n", name, age)
}
登录后复制
登录后复制

汇总表:

Function Purpose Stops Reading At Supports Formatting? Multiple Variables? Use Case
fmt.Scan Basic scanning Whitespace Simple input without newline
fmt.Scanln Scans until newline Newline (n) Input until newline
fmt.Scanf Formatted input scanning Controlled by format Precise formatted input
bufio.NewReader Advanced input handling Customizable Large input with spaces
函数 目的 停止阅读于 支持格式化吗? 多个变量? 用例 标题> fmt.扫描 基本扫描 空白 ❌ ✅ 简单输入,无需换行 fmt.Scanln 扫描直到换行 换行符(n) ❌ ✅ 输入直到换行 fmt.Scanf 格式化输入扫描 由格式控制 ✅ ✅ 精确格式化输入 bufio.NewReader 高级输入处理 可定制 ✅ ❌ 带空格的大输入 表>

以上是如何用 Go 语言进行扫描的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板