What is the difference between int and int64 in Go?

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.

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

ParseInt always returns int64

bitSize defines 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 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 example of 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)
}

Refer: stackoverflow.com