Comprimento máximo de uma fatia no Go

Eu tenho o seguinte código em execução em um sistema operacional Linux de 64 bits em uma máquina 4Gb:

package main

import (
    "fmt"
    "math"
)

func main() {
    r := make([]bool, math.MaxInt32)

    fmt.Println("Size: ", len(r))
}

Quando executo isso, recebo:

Size: 2147483647

Se eu mudar omath.MaxInt32 paramath.MaxUint32 Eu recebo:

fatal error: runtime: out of memory

Com tamanho de fatia demath.MaxUint32 Fiquei sem memória, esperava isso, mas quando tento usarmath.MaxInt64 Eu recebo:

panic: runtime error: makeslice: len out of range

Aparentemente, não posso criar uma fatia com um tamanho demath.MaxInt64, o que nos leva à minha pergunta: se a memória não é um problema, qual é a maior fatia que não consigo criar no Go?

Lembro que, em Java, os índices de matriz bruta são gerenciados com o tipoint, então o tamanho máximo de uma matriz bruta é o valor máximo de umint, se você tentar fazer isso comlong isso gerará uma exceção (tanto quanto me lembro), é o mesmo com o Go? o índice de fatia no Go está vinculado a um tipo específico?

EDITAR:

Eu executei o teste usandostruct{} ao invés debool e alocaçãomath.MaxInt64 elementos. Tudo correu como esperado e imprime:

Size: 9223372036854775807

Então, outra pergunta, por que existem duas mensagens de erro diferentes quando parece que o erro é o mesmo (falta de memória)?

Quais são as condições para cada erro aparecer?

questionAnswers(1)

yourAnswerToTheQuestion