Golang Scan值类型转换技巧

在Golang中,使用Scan函数进行输入时,如何处理不同类型之间的值转换?比如从字符串扫描到整数或浮点数时,有没有简洁高效的转换技巧?常见的方法有哪些,各自有什么优缺点?

2 回复

使用fmt.Scan时,需注意类型匹配。若输入类型不符,可用strconv包转换。例如:

  • strconv.Atoi() 转整型
  • strconv.ParseFloat() 转浮点
  • strconv.ParseBool() 转布尔

处理错误避免panic,确保输入合法。

更多关于Golang Scan值类型转换技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中,使用fmt.Scan系列函数读取输入时,所有输入默认都是字符串类型。以下是一些常用的值类型转换技巧:

1. 基础类型转换

package main

import "fmt"

func main() {
    var input string
    
    // 读取字符串
    fmt.Print("请输入数字: ")
    fmt.Scan(&input)
    
    // 转换为整数
    num, err := strconv.Atoi(input)
    if err != nil {
        fmt.Println("转换错误:", err)
        return
    }
    fmt.Printf("整数: %d\n", num)
    
    // 转换为浮点数
    f, err := strconv.ParseFloat(input, 64)
    if err == nil {
        fmt.Printf("浮点数: %.2f\n", f)
    }
}

2. 直接扫描到指定类型

package main

import "fmt"

func main() {
    var num int
    var price float64
    var name string
    
    fmt.Print("请输入整数、价格和姓名: ")
    // 自动类型转换
    _, err := fmt.Scan(&num, &price, &name)
    if err != nil {
        fmt.Println("输入错误:", err)
        return
    }
    
    fmt.Printf("整数: %d, 价格: %.2f, 姓名: %s\n", num, price, name)
}

3. 使用bufio.Scanner进行高级处理

package main

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

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    
    fmt.Print("请输入多个数字(空格分隔): ")
    if scanner.Scan() {
        input := scanner.Text()
        parts := strings.Fields(input)
        
        for i, part := range parts {
            if num, err := strconv.Atoi(part); err == nil {
                fmt.Printf("第%d个数字: %d\n", i+1, num)
            }
        }
    }
}

4. 错误处理技巧

func safeScanInt() int {
    var input string
    for {
        fmt.Print("请输入整数: ")
        fmt.Scan(&input)
        
        if num, err := strconv.Atoi(input); err == nil {
            return num
        }
        fmt.Println("输入无效,请重新输入")
    }
}

主要转换函数

  • strconv.Atoi() - 字符串转整数
  • strconv.ParseInt() - 字符串转指定进制整数
  • strconv.ParseFloat() - 字符串转浮点数
  • strconv.ParseBool() - 字符串转布尔值

记住始终处理转换错误,确保程序的健壮性。

回到顶部