大整数在golang中如何表示?

this code is right,

package main

import "fmt"

const (
    Big   = 1 << 100
    Small = Big >> 99
)

func needInt(x int) int { return x*10 + 1 }
func needFloat(x float64) float64 {
    return x * 0.1
}

func main() {
    fmt.Println(needInt(Small))
    fmt.Println(needFloat(Small))
    fmt.Println(needFloat(Big))
}

But when i add

fmt.Println(Big)

I meet an error:

tmp/sandbox042871394/main.go:16: constant 1267650600228229401496703205376 overflows int

i am confused for

 const (
        Big   = 1 << 100
        Small = Big >> 99
    )

why there is no error for this two lines code.

Big and Small are untyped constants.

fmt.Println accepts interface{}. Constant is converted to its default type.

The default type is int.

Short answer : Big is untyped integer constant

Constant expressions are always evaluated exactly; intermediate values and the constants themselves may require precision significantly larger than supported by any predeclared type in the language. The following are legal declarations:

const Huge = 1 << 100         // Huge == 1267650600228229401496703205376  (untyped integer constant)
const Four int8 = Huge >> 98  // Four == 4                                (type int8)

reference https://golang.org/ref/spec#Constant_expressions

Here in the constant you have not explicitly said it is an integer if said it would have failed

const (
    Big  int = 1 << 100
    Small       = Big >> 99
)

will show error

tmp/sandbox351128854/main.go:9: constant 1267650600228229401496703205376 overflows int