Comprimento vs Capacidade
Podemos determinar o comprimento de um array ou de um slice utilizando a função len
:
index.go
12345randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 } fmt.Println(len(randomNumbers)) // Output: 7 numbersSlice := randomNumbers[2:7] fmt.Println(len(numbersSlice)) // Output: 5
Podemos determinar a capacidade de um array ou de um slice utilizando a função cap
:
randomNumbers := []int{1, 4, 5, 7, 9, 10, 12}
fmt.Println(cap(randomNumbers)) // Saída: 7
numbersSlice := randomNumbers[2:7]
fmt.Println(cap(numbersSlice)) // Saída: 5
O comprimento e a capacidade de um array são sempre iguais. No entanto, para um slice, a capacidade pode ser diferente do comprimento. Por exemplo, no caso em que um slice é criado a partir de um array, a capacidade é maior que o comprimento:
index.go
1234randomNumbers := [7] int { 1, 4, 5, 7, 9, 10, 12 } numbersSlice := randomNumbers[1:3] fmt.Println(len(numbersSlice)) // Output: 2 fmt.Println(cap(numbersSlice)) // Output: 6
A capacidade de um slice é o número de elementos do startingIndex
do slice até o final do array original do qual ele foi criado. No exemplo acima, é 6
.
Lembre-se que modificar um slice também modifica o array original. Portanto, no exemplo dado, acrescentar um elemento (ou valor) ao slice atualiza essencialmente o elemento seguinte ao índice final do slice no array original. Em outras palavras, isso aumenta o tamanho do slice e atualiza os elementos do array original com base nos elementos/valores acrescentados. Isso ficará mais claro com um exemplo:
index.go
12345randomNumbers := [7] int { 1, 4, 5, 7, 9, 10, 12 } numbersSlice := randomNumbers[1:3] fmt.Println(randomNumbers) // Output: [1 4 5 7 9 10 12] numbersSlice = append(numbersSlice, 20, 30, 40) fmt.Println(randomNumbers) // Output: [1 4 5 20 30 40 12]
A capacidade é útil para determinar quantos elementos podemos acrescentar ao segmento. Se excedermos a capacidade do segmento, a função append
cria e retorna um novo segmento que não está conectado a uma parte do array original. Portanto, ele se torna desvinculado do array original.
Você pode ver o seguinte exemplo: o array original permanece inalterado, mesmo que tenhamos acrescentado mais elementos ao seu segmento:
index.go
12345678numbers := [] int { 1, 2, 3, 4 } numSlice := numbers[1:3] fmt.Println(numbers) // Outputs: [1 2 3 4] fmt.Println(numSlice) // Outputs: [2 3] fmt.Println(cap(numSlice)) // Outputs: 3 numSlice = append(numSlice, 9, 10) fmt.Println(numSlice) // Outputs: [2 3 9 10] fmt.Println(numbers) // Outputs: [1 2 3 4]
Isso aconteceu porque o slice tinha uma capacidade de 3, que ultrapassamos. Como resultado, a função append
retornou um novo slice que não faz mais referência ao array original.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 1.96
Comprimento vs Capacidade
Deslize para mostrar o menu
Podemos determinar o comprimento de um array ou de um slice utilizando a função len
:
index.go
12345randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 } fmt.Println(len(randomNumbers)) // Output: 7 numbersSlice := randomNumbers[2:7] fmt.Println(len(numbersSlice)) // Output: 5
Podemos determinar a capacidade de um array ou de um slice utilizando a função cap
:
randomNumbers := []int{1, 4, 5, 7, 9, 10, 12}
fmt.Println(cap(randomNumbers)) // Saída: 7
numbersSlice := randomNumbers[2:7]
fmt.Println(cap(numbersSlice)) // Saída: 5
O comprimento e a capacidade de um array são sempre iguais. No entanto, para um slice, a capacidade pode ser diferente do comprimento. Por exemplo, no caso em que um slice é criado a partir de um array, a capacidade é maior que o comprimento:
index.go
1234randomNumbers := [7] int { 1, 4, 5, 7, 9, 10, 12 } numbersSlice := randomNumbers[1:3] fmt.Println(len(numbersSlice)) // Output: 2 fmt.Println(cap(numbersSlice)) // Output: 6
A capacidade de um slice é o número de elementos do startingIndex
do slice até o final do array original do qual ele foi criado. No exemplo acima, é 6
.
Lembre-se que modificar um slice também modifica o array original. Portanto, no exemplo dado, acrescentar um elemento (ou valor) ao slice atualiza essencialmente o elemento seguinte ao índice final do slice no array original. Em outras palavras, isso aumenta o tamanho do slice e atualiza os elementos do array original com base nos elementos/valores acrescentados. Isso ficará mais claro com um exemplo:
index.go
12345randomNumbers := [7] int { 1, 4, 5, 7, 9, 10, 12 } numbersSlice := randomNumbers[1:3] fmt.Println(randomNumbers) // Output: [1 4 5 7 9 10 12] numbersSlice = append(numbersSlice, 20, 30, 40) fmt.Println(randomNumbers) // Output: [1 4 5 20 30 40 12]
A capacidade é útil para determinar quantos elementos podemos acrescentar ao segmento. Se excedermos a capacidade do segmento, a função append
cria e retorna um novo segmento que não está conectado a uma parte do array original. Portanto, ele se torna desvinculado do array original.
Você pode ver o seguinte exemplo: o array original permanece inalterado, mesmo que tenhamos acrescentado mais elementos ao seu segmento:
index.go
12345678numbers := [] int { 1, 2, 3, 4 } numSlice := numbers[1:3] fmt.Println(numbers) // Outputs: [1 2 3 4] fmt.Println(numSlice) // Outputs: [2 3] fmt.Println(cap(numSlice)) // Outputs: 3 numSlice = append(numSlice, 9, 10) fmt.Println(numSlice) // Outputs: [2 3 9 10] fmt.Println(numbers) // Outputs: [1 2 3 4]
Isso aconteceu porque o slice tinha uma capacidade de 3, que ultrapassamos. Como resultado, a função append
retornou um novo slice que não faz mais referência ao array original.
Obrigado pelo seu feedback!