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

例如,

package main

import (

"flag"

"fmt"

"os"

"strconv"

)

func main() {

flag.Parse()

s := flag.Arg(0)

// string to int

i, err := strconv.Atoi(s)

if err != nil {

// handle error

fmt.Println(err)

os.Exit(2)

}

fmt.Println(s, i)

}

我可以return 2吗?

func main() { ... }不带参数,也不返回值。 使用os包Exit函数,例如 os.Exit(2).

另外,也可以做一个致命的举动。 panic(err)

转换简单字符串

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

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

Atoi is equivalent to ParseInt(s, 10, 0), converted to type int.

这是使用上述功能的示例(在Go Playground上尝试):

flag.Parse()

s := flag.Arg(0)

if i, err := strconv.Atoi(s); err == nil {

fmt.Printf("i=%d, type: %T

", i, i)

}

if i, err := strconv.ParseInt(s, 10, 64); err == nil {

fmt.Printf("i=%d, type: %T

", i, i)

}

var i int

if _, err := fmt.Sscan(s, &i); err == nil {

fmt.Printf("i=%d, type: %T

", 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

}

ParseInt的第二个参数指定什么?

@ kaushik94单击strconv.ParseInt()链接,您将立即看到:ParseInt(s string, base int, bitSize int)。 因此其基数为:" ParseInt解释给定基数(2到36)中的字符串s"

请注意,strconv.ParseInt()的bitSize参数不会将字符串转换为您选择的类型,而只是在此处将结果限制为特定的位数。 另请参阅:stackoverflow.com/questions/55925894/

@viv是的,那是正确的。 如果需要类型int的值并且使用了strconv.ParseInt(),则需要手动类型转换(从int64到int)。

以下是将字符串解析为整数的三种方法,从最快的运行时间到最慢的运行时间:

strconv.ParseInt(...)最快

strconv.Atoi(...)仍然非常快

fmt.Sscanf(...)速度不是很快,但最灵活

这是一个基准测试,显示了每个功能的用法和示例计时:

package main

import"fmt"

import"strconv"

import"testing"

var num = 123456

var numstr ="123456"

func BenchmarkStrconvParseInt(b *testing.B) {

num64 := int64(num)

for i := 0; i < b.N; i++ {

x, err := strconv.ParseInt(numstr, 10, 64)

if x != num64 || err != nil {

b.Error(err)

}

}

}

func BenchmarkAtoi(b *testing.B) {

for i := 0; i < b.N; i++ {

x, err := strconv.Atoi(numstr)

if x != num || err != nil {

b.Error(err)

}

}

}

func BenchmarkFmtSscan(b *testing.B) {

for i := 0; i < b.N; i++ {

var x int

n, err := fmt.Sscanf(numstr,"%d", &x)

if n != 1 || x != num || err != nil {

b.Error(err)

}

}

}

您可以通过另存为atoi_test.go并运行go test -bench=. atoi_test.go来运行它。

goos: darwin

goarch: amd64

BenchmarkStrconvParseInt-8      100000000           17.1 ns/op

BenchmarkAtoi-8                 100000000           19.4 ns/op

BenchmarkFmtSscan-8               2000000          693   ns/op

PASS

ok      command-line-arguments  5.797s

尝试这个

import ("strconv")

value : ="123"

number,err := strconv.ParseUint(value, 10, 32)

如果您控制输入数据,则可以使用迷你版

package main

import (

"testing"

"strconv"

)

func Atoi (s string) int {

var (

n uint64

i int

v byte

)

for ; i < len(s); i++ {

d := s[i]

if '0' <= d && d <= '9' {

v = d - '0'

} else if 'a' <= d && d <= 'z' {

v = d - 'a' + 10

} else if 'A' <= d && d <= 'Z' {

v = d - 'A' + 10

} else {

n = 0; break

}

n *= uint64(10)

n += uint64(v)

}

return int(n)

}

func BenchmarkAtoi(b *testing.B) {

for i := 0; i < b.N; i++ {

in := Atoi("9999")

_ = in

}

}

func BenchmarkStrconvAtoi(b *testing.B) {

for i := 0; i < b.N; i++ {

in, _ := strconv.Atoi("9999")

_ = in

}

}

最快的选择(如有必要,写上您的支票)。结果:

Path>go test -bench=. atoi_test.go

goos: windows

goarch: amd64

BenchmarkAtoi-2                 100000000               14.6 ns/op

BenchmarkStrconvAtoi-2          30000000                51.2 ns/op

PASS

ok      path     3.293s

什么 ? 真的吗 写" go"的人变得很容易。 不要旋转轮子:)

那Atoi("-9999")呢?

go var 一个整数_在Go中将字符串转换为整数类型?相关推荐

  1. python字符串转换成整数_在Python中将字符串转换为整数的方法

    在本文中,我们将向你展示如何将Python字符串转换为整数,可在Linux操作平台上进行.Python中的所有数据类型(包括整数和字符串)都是对象,通常在编写Python代码时,你需要将一种数据类型转 ...

  2. python字符串转整数_如何在Python中将字符串转换为整数

    Python中的所有数据类型(包括整数和字符串)都是对象.通常在编写Python代码时,您需要将一种数据类型转换为另一种数据类型.例如,要对表示为字符串的数字进行数学运算,需要将其转换为整数. 在本教 ...

  3. [转载] python字符串转有符号数字_在python中将字符串转换为8位带符号整数

    参考链接: Python中将十进制转换为字符串 I'm trying to patch together a motor control system using python and ctypes ...

  4. c++ascii码转换为数字_在C++中将字符串转换为数字

    有许多情况需要将数字转换为字符串或将字符串转换为数字.本文中提到了一些实现此任务的方法. 将字符串转换为数字 方法1:使用stringstream类或sscanf() 方法2:使用stoi()或ato ...

  5. 编程参考 - C语言中将字符串转换为整数(转)

    C语言,主要有两种方法可以将字符串转为整数:atoi() 和 strtol(). 1,atoi() Syntax: int atoi(const char *str); 包含的头文件是:stdlib. ...

  6. 编程参考 - C语言中将字符串转换为整数

    C语言,主要有两种方法可以将字符串转为整数:atoi() 和 strtol(). 1,atoi() Syntax: int atoi(const char *str); 包含的头文件是:stdlib. ...

  7. php怎么字符串转为整数,在PHP中将字符串转换为整数的最快方法

    我刚刚设置了一个快速的基准测试练习: Function time to run 1 million iterations --------------------------------------- ...

  8. c 字符串数组_在C++中将字符串转换为char数组

    我们许多人遇到了错误'cannot convert std::string to char[] or char* data type'. 例如: Input : string s = "ge ...

  9. Scala程序将字符串转换为整数

    In Scala, there is a huge library to support different operations on a string. One such operation is ...

最新文章

  1. VMware Server使用经验记录
  2. 三维重建学习(1):基础知识:旋转矩阵与旋转向量
  3. linux下的二进制文件的编辑和查看 -
  4. 数据结构与算法 | 栈
  5. 周昌印:忘记技术 从用户与市场考虑问题
  6. 将github pages搭建的网页添加到百度搜索资源平台上
  7. 15年大厂经历!大佬总结:0基础如何学习Python?
  8. php iis redis,iis windows phpstudy安装redis扩展
  9. 360手机浏览器_网信办:UC、QQ、360、搜狗等8款手机浏览器被纳入首批整治范围...
  10. 「M1兼容」最新ps2022版photoshop 2022 Mac中文版下载安装教程分享
  11. flexible.js淘宝移动端rem自适应用法
  12. cad 打开硬件加速卡_老司机手把手带你解决,各种CAD疑难杂症
  13. iOS中的UIView的基本属性1
  14. DPDK初始化分析(五)
  15. intel网卡驱动下载linux,Intel网卡驱动下载_万能英特尔网卡驱动_万能网卡驱动_5分享...
  16. 六年级计算机测试题logo,LOGO语言基础知识测试题2017(含答案)
  17. 相似图片搜索算法介绍
  18. 平面变压器的设计(翻译)(4)
  19. 计算机发展历程 思维导图
  20. excel----分组后统计

热门文章

  1. 分享超好用的windows桌面时钟软件合集
  2. 神泣虚拟机 上游戏提示speedhack detected 是什么意?
  3. 软件测试的薪资到底有多高?5分钟看明白你和年薪30W+软件工程师的差距
  4. CnOpenData中国汽车能源消耗量数据
  5. 帮助您成为知名游戏主播的3个技巧
  6. 青岛大学微型计算机控制技术期末,青大教师于金鹏 | 根植青大 言传身教 砺行致远...
  7. visual studio代码自动排版
  8. 微信公众号粉丝查看增强工具v0.1.12
  9. SSM框架整合所需相关jra包的maven地址
  10. NCL将Grib文件转换成nc文件 JRA55文件说明