minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Apresentamos if e for em nosso artigo anterior. Vamos praticar como usá-lo.continue
Declaração para calcular a soma de números pares dentro de 100. À medida que escrevemos código,continue
instrução nos ajudará a pular certas iterações que não são necessárias, por exemplo, neste exemplo, pularemos todos os números ímpares.
- sum := 0
- for i := 1; i < 100; i++{
- if i & 1 == 0 {
- continue
- }
- sum += i
- }
-
- fmt.Println("the sum is",sum)
Na programação, muitas vezes precisamos lidar com um conjunto de elementos do mesmo tipo, e esses conjuntos de elementos são representados por estruturas de dados específicas na linguagem Go. Hoje, apresentarei detalhadamente vários tipos de coleção em Go: array, slice e map.
Primeiro, vamos começar com matrizes. Array é a estrutura de dados mais básica em Go. É uma sequência de comprimento fixo de elementos do mesmo tipo. Depois que um array é declarado, seu comprimento não pode ser alterado. A declaração e inicialização de arrays são muito simples,
Ao declarar um array, você precisa especificar o tipo e o comprimento do array. Veja como um array é declarado:
var arrayName [arrayLength]elementType
Por exemplo, declare uma matriz inteira de comprimento 5:
var numbers [5]int
Você pode inicializar um array de várias maneiras:
var numbers = [5]int{1, 2, 3, 4, 5}
:=
Breve declaração:numbers := [5]int{1, 2, 3, 4, 5}
numbers := [...]int{1, 2, 3, 4, 5}
numbers := [5]int{0: 1, 4: 5}
Você pode acessar os elementos de um array por índice, começando em 0:
value := numbers[2] // 获取索引为 2 的元素
você pode usarfor
Faça um loop por todos os elementos de um array:
- for i, value := range numbers {
- fmt.Printf("Index: %d, Value: %dn", i, value)
- }
Você pode usar o integradolen
Função para obter o comprimento de um array:
length := len(numbers)
Se uma matriz não for inicializada explicitamente, seus elementos serão automaticamente definidos com o valor zero de seu tipo. Por exemplo, o valor zero de uma matriz inteira é 0:
var numbers [5]int // 所有元素都是 0
A linguagem Go também oferece suporte a arrays multidimensionais. A seguir está um exemplo de declaração e inicialização de um array inteiro 2x3:
- var matrix [2][3]int
- matrix = [2][3]int{{1, 2, 3}, {4, 5, 6}}
Como o comprimento do array é fixo, isso pode não ser muito flexível em alguns casos. Se precisar de uma coleção de comprimento variável, você poderá usar fatias.
O próximo é o slice, que é um tipo integrado mais flexível que pode ser considerado um array dinâmico. O comprimento da fatia é variável e ela é criada a partir de um array, proporcionando mais comodidade. Veja como declarar e inicializar uma fatia:
- s := make([]int, 3) // 创建一个长度为3的整型切片
- s[0] = 1 // 切片元素赋值
- s[1] = 2
- s[2] = 3
- s = append(s, 4) // 向切片追加元素
Na linguagem Go, embora arrays e fatias sejam usados para armazenar uma série de elementos do mesmo tipo, eles apresentam diferenças significativas na alocação de memória, na variabilidade de tamanho e no uso. Aqui estão as principais diferenças entre matrizes e fatias:
[3]int
e[4]int
são tipos diferentes.[]int
É o tipo comum para todas as fatias inteiras.make
Função ou fatia de uma matriz para inicializar, sem tamanho especificado.Aqui estão exemplos de inicialização para arrays e fatias:
- // 数组
- var arr [3]int = [3]int{1, 2, 3}
-
- // 切片
- var slice []int = []int{1, 2, 3}
- // 或者使用 make 函数
- slice := make([]int, 3)
append
A função adiciona elementos ou obtém subfatias por meio de operações de fatiamento.A matriz subjacente da fatia pode ser alocada no heap, e a complexidade de tempo de acesso aos elementos da fatia também é O(1), masappend
Pode resultar na realocação da matriz subjacente, que normalmente é uma operação O(n).Finalmente, vamos dar uma olhada no mapeamento. Um mapa é uma matriz associativa em Go que mapeia chaves para valores. As chaves do mapa podem ser de qualquer tipo suportado pelo operador de igualdade, como inteiros, números de ponto flutuante, strings, ponteiros, interfaces (desde que os valores contidos na interface sejam comparáveis), estruturas e arrays. O valor mapeado pode ser de qualquer tipo.
A sintaxe para declarar um mapa é a seguinte:
var mapName map[keyType]valueType
Por exemplo, declare um mapa com chaves como strings e valores como inteiros:
var scores map[string]int
Depois de declarar o mapa, você precisa passarmake
função para inicializá-lo para que possa ser usado:
scores = make(map[string]int)
Alternativamente, você pode usar uma declaração curta e inicializar:
scores := make(map[string]int)
Você também pode usar literais para inicialização no momento da declaração:
- scores := map[string]int{
- "alice": 90,
- "bob": 85,
- "charlie": 88,
- }
scores["alice"] = 90
value := scores["alice"]
Se a chave não existir, será retornado um valor zero para esse tipo de valor.
Você pode usar o idioma comma -ok para verificar se a chave existe no mapa:
- value, exists := scores["alice"]
- if exists {
- // 键存在
- } else {
- // 键不存在
- }
usardelete
A função pode remover um par de valores-chave do mapa:
delete(scores, "alice")
Se a chave não existir,delete
A função não faz nada.
usarfor
Um loop pode percorrer todos os pares de valores-chave no mapa:
- for key, value := range scores {
- fmt.Printf("%s: %dn", key, value)
- }
O valor zero do mapa énil
.umnil
Um mapa não possui estrutura de dados subjacente e não pode adicionar elementos.Antes de adicionar elementos ao mapa, você deve usarmake
Inicialize-o.
Você pode usar o integradolen
Função para obter o número de pares de valores-chave no mapa:
length := len(scores)
As chaves do mapa podem ser de qualquer tipo comparável, como inteiros, números de ponto flutuante, strings, ponteiros, interfaces (desde que os valores contidos na interface sejam comparáveis), estruturas, arrays, etc. Fatias, mapas e funções não podem ser usados como chaves de mapa porque esses tipos não suportam comparações de igualdade.
Na linguagem Go, arrays, fatias e mapas são três estruturas de dados comumente usadas, cada uma com características e considerações diferentes. Aqui estão alguns pontos a serem observados ao usá-los:
nil
, precisa ser inicializado antes do uso.nil
,nil
O mapa não pode ser usado para armazenar pares de valores-chave e deve ser inicializado antes do uso.delete
Excluir uma chave que não existe não gera erro, mas é seguro verificar se a chave existe.