Go和int64有什么不同?
我有一个string包含一个整数(已从文件中读取)。
我想使用strconv.ParseInt()将string转换为一个int 。  ParseInt要求我提供bitsize(位大小0,8,16,32和64对应于int,int8,int16,int32和int64)。 
 从文件读取的整数很小(即它应该适合一个正常的int)。 如果我传递一个0的比特,但是,我得到了一个int64types的结果(大概是因为我在64位操作系统上运行)。 
为什么发生这种情况? 我怎么才能得到一个正常的int? (如果有人快速入门,何时以及为什么我应该使用不同的inttypes,那太棒了!)
 编辑:我可以使用int([i64_var])将int64转换为正常的int。 但我仍然不明白为什么ParseInt()给我一个int64时,我要求的比特大小为0。 
 func ParseInt(s string, base int, bitSize int) (i int64, err error) 
  ParseInt总是返回int64 
  bitSize定义值的范围。 如果与s对应的值不能用给定大小的有符号整数表示,则err.Err = ErrRange。 
http://golang.org/pkg/strconv/#ParseInt
 type int int 
int是一个至less有32位大小的有符号整数types。 这是一个独特的types,但是,不是int32的别名。
http://golang.org/pkg/builtin/#int
 所以int将来可能会比32位更大,或者像C中的int这样的系统。 
 我猜在一些系统int64可能会比int32更快,因为该系统只能使用64位整数。 
 这是bitSize为8时的错误示例 
http://play.golang.org/p/_osjMqL6Nj
 package main import ( "fmt" "strconv" ) func main() { i, err := strconv.ParseInt("123456", 10, 8) fmt.Println(i, err) } 
包strconv
func ParseInt
func ParseInt(s string, base int, bitSize int) (i int64, err error)ParseInt解释给定基础(2到36)中的strings并返回相应的值i。 如果base == 0,则基数由string的前缀隐含:base 16代表“0x”,base 8代表“0”,否则以10为底数。
bitSize参数指定结果必须适合的整数types。 位大小0,8,16,32和64对应于int,int8,int16,int32和int64。
ParseInt返回的错误具有具体types* NumError,并且包含err.Num = s。 如果s为空或包含无效数字,则err.Err = ErrSyntax; 如果与s对应的值不能用给定大小的有符号整数表示,则err.Err = ErrRange。
  ParseInt总是返回一个int64值。 取决于bitSize ,该值将适合int , int8 , int16 , int32或int64 。 如果该值不能由bitSize给定大小的有符号整数表示,则err.Err = ErrRange 。 
Go编程语言规范
数字types
一个n位整数的值是n位宽,用二进制补码表示。
int8 the set of all signed 8-bit integers (-128 to 127) int16 the set of all signed 16-bit integers (-32768 to 32767) int32 the set of all signed 32-bit integers (-2147483648 to 2147483647) int64 the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)还有一组具有实现特定大小的预定义数字types:
uint either 32 or 64 bits int same size as uint
  int是32或64位,具体取决于实现。 通常32位编译器为32位,64位编译器为64位。 
 要找出int或uint的大小,请使用strconv.IntSize 。 
包strconv
常量
const IntSize = intSize
IntSize是int或uint值的大小。
例如,
 package main import ( "fmt" "runtime" "strconv" ) func main() { fmt.Println(runtime.Compiler, runtime.GOARCH, runtime.GOOS) fmt.Println(strconv.IntSize) } 
输出:
 gc amd64 linux 64 
  strconv.ParseInt和朋友返回64位版本,以保持API清洁和简单。 否则,人们将不得不为每个可能的返回types创build单独的版本。 或者返回interface{} ,然后必须经过一个types断言。 没有一个是理想的。 
  int64被选中,因为它可以保持任何整数大小,包括支持的64位。 您传入函数的位大小确保将值正确地钳位到正确的范围。 所以你可以简单地对返回的值进行types转换,把它转换成你需要的任何整数types。 
 至于int和int64之间的区别,这是依赖于体系结构的。  int只是32位或64位整数的别名,具体取决于您正在编译的架构。 
 对于挑剔的眼睛:返回的值是一个有符号的整数。 对于无符号整数,有一个单独的strconv.ParseUint函数,它返回uint64并遵循如上所述的相同推理。 
 为了您的目的, strconv.Atoi()会更方便我想。 
 其他答案已经非常详尽地解释inttypes,但我认为这里有一个指向Go语言规范的链接: http : //golang.org/ref/spec#Numeric_types