我正在尝试将从 flag.Arg(n)
返回的字符串转换为 int
。在 Go 中执行此操作的惯用方法是什么?
原文由 Matt Joiner 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试将从 flag.Arg(n)
返回的字符串转换为 int
。在 Go 中执行此操作的惯用方法是什么?
原文由 Matt Joiner 发布,翻译遵循 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 许可协议
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答888 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.1k 阅读
例如
strconv.Atoi
。代码: