在下面的代码中,我逐符文迭代string符文,但实际上我需要int来执行一些校验和计算.我真的需要把rune编码成[]byte,然后把它转换成string,然后用Atoirune中得到int吗?这是惯用的方法吗?

// The string `s` only contains digits.
var factor int
for i, c := range s[:12] {
    if i % 2 == 0 {
        factor = 1
    } else {
        factor = 3
    }
    buf := make([]byte, 1)
    _ = utf8.EncodeRune(buf, c)
    value, _ := strconv.Atoi(string(buf))
    sum += value * factor
}

操场上:http://play.golang.org/p/noWDYjn5rJ

推荐答案

这个问题比看起来要简单.您可以使用int(r)rune值转换为int值.但是您的代码暗示您想要数字的ASCII(或UTF-8)表示形式的整数值,使用r - '0'作为runeint(r - '0')作为int可以很容易地获得整数值.请注意,超出范围的符文会 destruct 该逻辑.

Go相关问答推荐

向路由发送获取请求时Golang中出现404错误

使用Gorm创建自定义连接表

CURL和Postman HTTP POST工作,但Golang请求失败,状态为400

如何使用Gio设置标题栏图标

Go中的Slice[:1][0]与Slice[0]

包裹网.Conn导致挂起读取

Go:为什么我不能比较 net.Addr

Cypher 查找(多个)最低 node

Go-如何在递归函数中关闭通道

通过多阶段构建复制到 Docker 容器中时找不到文件

Get 请求在 Thunder 客户端/Postman 中返回数据,但在 Golang 代码中给出空白数据

为什么互斥量比 golang 中的通道慢?

如何过滤来自 fsnotify 的重复系统消息

使用 GO 在侧 tar 文件中提取 tar 文件的最快方法

如何在没有内存分配的情况下压缩和发布文件

如何在gin中获取参数值数组

具有近似约束的函数值导致的实例化失败

Go 使用 struct 作为接口而不实现所有方法

如何在 Gorm 中获得特定日期的最大值?

即使没有竞争条件也没有得到任何输出