在 Go 中将字符串转换为整数类型?

新手上路,请多包涵

我正在尝试将从 flag.Arg(n) 返回的字符串转换为 int 。在 Go 中执行此操作的惯用方法是什么?

原文由 Matt Joiner 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 455
2 个回答

例如 strconv.Atoi

代码:

 package main

import (
    "fmt"
    "strconv"
)

func main() {
    s := "123"

    // string to int
    i, err := strconv.Atoi(s)
    if err != nil {
        // ... handle error
        panic(err)
    }

    fmt.Println(s, i)
}

原文由 peterSO 发布,翻译遵循 CC BY-SA 4.0 许可协议

转换简单字符串

最简单的方法是使用 strconv.Atoi() 函数。

请注意,还有许多其他方法。例如 fmt.Sscan()strconv.ParseInt() 这提供了更大的灵活性,例如您可以指定基数和位大小。也如 strconv.Atoi() 的文档中所述:

atoi相当于ParseInt(s, 10, 0),转为int类型。

下面是一个使用上述函数的示例(在 Go Playground 上尝试):

 flag.Parse()
s := flag.Arg(0)

if i, err := strconv.Atoi(s); err == nil {
    fmt.Printf("i=%d, type: %T\n", i, i)
}

if i, err := strconv.ParseInt(s, 10, 64); err == nil {
    fmt.Printf("i=%d, type: %T\n", i, i)
}

var i int
if _, err := fmt.Sscan(s, &i); err == nil {
    fmt.Printf("i=%d, type: %T\n", i, i)
}

输出(如果使用参数调用 "123" ):

 i=123, type: int
i=123, type: int64
i=123, type: int

解析自定义字符串

还有一个方便的 fmt.Sscanf() 与格式字符串相比,它提供了更大的灵活性,您可以指定数字格式(如宽度、基数等)以及输入中的其他额外字符 string

这非常适合解析包含数字的自定义字符串。例如,如果您的输入以 "id:00123" 的形式提供,其中您有一个前缀 "id:" 并且数字固定为 5 位数字,如果较短则用零填充,这很容易解析这个:

 s := "id:00123"

var i int
if _, err := fmt.Sscanf(s, "id:%5d", &i); err == nil {
    fmt.Println(i) // Outputs 123
}

原文由 icza 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题