What is the difference between int and int64 in Go?
go
Solution
func ParseInt(s string, base int, bitSize int) (i int64, err error)
`ParseInt` always returns `int64`.
`bitSize` defines the range of values.
If the value corresponding to s cannot be represented by a signed integer of the given size, err.Err = ErrRange.
http://golang.org/pkg/strconv/#ParseInt
type int int
int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.
http://golang.org/pkg/builtin/#int
So `int` could be bigger than 32 bit in the future or on some systems like `int` in C.
I guess on some systems `int64` might be faster than `int32` because that system only works with 64-bit integers.
Here is an example of an error when `bitSize` is 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)
}
Problem
I have a string containing an integer (which has been read from a file). I'm trying to convert the `string` to an `int` using `strconv.ParseInt()`. `ParseInt` requires that I provide a bitsize (bit sizes 0, 8, 16, 32, and 64 correspond to int, int8, int16, int32, and int64). The integer read from the file is small (i.e. it should fit in a normal int). If I pass a bitsize of 0, however, I get a result of type `int64` (presumably because I'm running on a 64-bit OS). Why is this happening? How do I just get a normal int? (If someone has a quick primer on when and why I should use the different int types, that would awesome!) Edit: I can convert the int64 to a normal int using `int([i64_var])`. But I still don't understand why `ParseInt()` is giving me an int64 when I'm requesting a bitsize of 0.