"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Vamos falar sobre fatias em Go: a dupla dinâmica de matrizes!

Vamos falar sobre fatias em Go: a dupla dinâmica de matrizes!

Postado em 2025-03-23
Navegar:846

Então, você está mergulhando e ouve sobre fatias. "O que são as fatias?" você pode se perguntar. Não são matrizes o suficiente? Bem, vamos quebrá -lo! As fatias são um recurso assassino em Go. Eles são como matrizes, mas muito mais frios - são dinâmicos e flexíveis, capazes de crescer e diminuir as necessidades do seu programa. Mas há uma ou duas capturas ao longo do caminho. Vamos descompactar tudo e fazer com que você escorre à fatia!

Let

Fatias: Matrizes em esteróides

Na sua essência, as fatias são matrizes. Mas, diferentemente das matrizes estáticas, as fatias são dinâmicas; Eles podem mudar o tamanho, o que é super útil quando suas necessidades de dados são imprevisíveis. Imagine que você tem uma lista de itens e, às vezes, são 5 itens, mas outras vezes podem ser 50! As fatias fazem disso não grande coisa. Eles apenas redimensionam a si mesmos - meio que mágica. ✨

Mas aqui está o negócio: toda vez que uma fatia muda de tamanho, uma nova matriz é criada embaixo dela e os dados são copiados para essa nova matriz. Conveniente? Definitivamente! Mas há um custo computacional aqui. Cada redimensionamento significa que go tem que alocar nova memória e embaralhar as coisas.

Então, como domamos essa besta? Entre make

Aqui está uma dica útil para você: se você souber que precisará de muito espaço para uma fatia, use a função Make. Com make ([] t, len, cap), você está dizendo: "Ei, me dê uma fatia desse tipo, com esse comprimento e essa capacidade". Ter uma capacidade inicial pronta para economizar economiza o custo de redimensionamento posteriormente. Inteligente, certo?

  • Por exemplo:
numbers := make([]int, 0, 100)

essa fatia começa com uma capacidade de 100, mas ainda não tem itens. Você está pronto para preenchê -lo sem ir constantemente redimensionar as coisas. A longo prazo, você economiza no desempenho.

Comprimento vs. Capacidade: a dupla dinâmica de fatias

Cada fatia tem um comprimento (len) e uma capacidade (cap), e eles desempenham papéis diferentes:

  • len (slice): este é o número de elementos atualmente no slice.
  • Cap (Slice): Este é o comprimento máximo que a fatia pode manter antes de precisar de um redimensionamento. Digamos que você tenha uma fatia X. Se você tentar acessar x [n] com um N maior que o comprimento (len (x)), você receberá um erro fora do alcance. Mas, não se preocupe! Se você estiver adicionando itens a uma fatia e atingir sua capacidade, vá apenas aloca uma matriz maior para você sob o capô. Tudo que você precisa fazer é continuar codificando.

Precisa adicionar mais itens? Conheça o Append

Quando você deseja cultivar uma fatia, o Append é sua função preferida. Ele foi projetado para adicionar elementos no final da sua fatia e redimensiona automaticamente a fatia, se necessário. Diga adeus aos erros fora dos limites (bem, principalmente)!

  • aqui está um exemplo prático:
numbers := []int{1, 2, 3}
numbers = append(numbers, 4, 5, 6)

Se a fatia tiver capacidade suficiente para ajustar os novos itens, ele o usará. Caso contrário, o Append cria uma nova matriz com mais espaço e move seus dados. Simples assim! De acordo com a Effecting Go, se a capacidade for insuficiente, o Append "alocará uma nova matriz subjacente". Muito legal, certo?

Embrulhando

as fatias em Go são seu amigo - e um poderoso nisso. Eles permitem que você trabalhe com coleções de dados com flexibilidade, enquanto esconde alguns dos detalhes do gerenciamento de memória. Mas lembre -se: com grande poder vem uma grande responsabilidade. Cada redimensionamento vem com um pouco de sobrecarga computacional. Ao entender como as fatias funcionam e como fazer e apêndio podem ajudar, você está no caminho certo para escrever um código eficiente e elegante.

eficaz-go

Declaração de lançamento Este artigo é reproduzido em: https://dev.to/learngo/lets-talk-about-slices-in-go-the-dynamic-duo-of-arrays-2c1?1 Se houver alguma infração, entre em contato com [email protected] para excluí-lo.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3