Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Comprimento vs Capacidade | Vetores e Fatias
Introdução ao Golang

bookComprimento vs Capacidade

Podemos determinar o comprimento de um array ou de um slice utilizando a função len:

index.go

index.go

copy
12345
randomNumbers := [] 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

index.go

copy
1234
randomNumbers := [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

index.go

copy
12345
randomNumbers := [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

index.go

copy
12345678
numbers := [] 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.

question mark

Qual é a sintaxe correta para adicionar um elemento z a um slice chamado alphabets?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you explain more about how the capacity of a slice is calculated?

What happens if I keep appending elements beyond the slice's capacity?

Can you provide an example showing how the original array and the new slice differ after exceeding capacity?

Awesome!

Completion rate improved to 1.96

bookComprimento 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

index.go

copy
12345
randomNumbers := [] 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

index.go

copy
1234
randomNumbers := [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

index.go

copy
12345
randomNumbers := [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

index.go

copy
12345678
numbers := [] 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.

question mark

Qual é a sintaxe correta para adicionar um elemento z a um slice chamado alphabets?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 4
some-alt