Go言語で1000000000000000000 × 1000000000000000000という計算をしたら結果が
-5527149226598858752になりました。
単純に考えると1000000000000000000000000000000000000になると思うのですがなぜでしょう。

ちなみに実行したコードは以下のものです。

package main
import "fmt"

func main() {

    i := 1000000000000000000
    fmt.Println(i*i)

}

Rubyで同じようにするとちゃんと1000000000000000000000000000000000000になるのですが、言語の仕様でしょうか。

i = 1000000000000000000
p i*i