小编典典

Go 中的 int 和 int64 有什么区别?

go

我有一个包含整数的字符串(已从文件中读取)。

我正在尝试将 转换stringintusing strconv.ParseInt()ParseInt要求我提供一个位大小(位大小 0、8、16、32 和 64 对应于 int、int8、int16、int32 和 int64)。

从文件中读取的整数很小(即它应该适合正常的 int)。但是,如果我传递的位大小为 0,则会得到类型结果int64(大概是因为我在 64 位操作系统上运行)。

为什么会这样?我怎样才能得到一个普通的 int?(如果有人对我何时以及为什么应该使用不同的 int 类型有一个快速入门,那就太棒了!)

编辑:我可以使用 .int64 将 int64 转换为普通 int int([i64_var])。但是我仍然不明白为什么ParseInt()在我请求位大小为 0 时给我一个 int64。


阅读 936

收藏
2021-12-06

共1个答案

小编典典

func ParseInt(s string, base int, bitSize int) (i int64, err error)

ParseInt 总是返回 int64

bitSize定义值的范围。如果与 s 对应的值不能用给定大小的有符号整数表示,则 err.Err = ErrRange。

type int int

int 是大小至少为 32 位的有符号整数类型。然而,它是一种独特的类型,而不是例如 int32 的别名。

所以int将来可能会大于 32 位或在某些系统上(如intC)。

我猜在某些系统上int64可能比int32因为该系统仅适用于 64 位整数更快。

bitSize是 8时的错误示例

package main

import (
    "fmt"
    "strconv"
)

func main() {
    i, err := strconv.ParseInt("123456", 10, 8)
    fmt.Println(i, err)
}
2021-12-06