Introdução à linguagem Go: tipos de dados compostos

Anteriormente, fizemos uma exploração preliminar do mundo da linguagem Go e aprendemos sobre os tipos de dados básicos. Para atender a diferentes necessidades especiais, temos que usar diferentes maneiras de combinar tipos básicos para construir novos tipos de dados compostos - matrizes, estruturas, fatias ., mapa.

1. Matriz

Uma matriz é uma sequência de comprimento fixo de um ou mais elementos do mesmo tipo.

Por exemplo:

Matriz unidimensional:

//声明一个数组
var arr[4]int
//声明并初始化数组
var brr = [3]int{1,2,3}

Matriz bidimensional:

//声明一个二维数组
var a[3][3]int
//声明并初始化二维数组
var b = [5][5]int{
   
   {1,2,3,4,5}}

A função len integrada pode retornar o número de elementos em um array:

var a = [3]int{1,2}
fmt.Println(len(a)-1) //输出a[2]的值0

Cada elemento do array pode ser acessado através de um índice subscrito, que varia de 0 ao comprimento do array menos 1.

2. Fatia

Como o comprimento da matriz é fixo, as matrizes raramente são usadas diretamente na linguagem Go. O tipo correspondente de matriz é Slice, que é uma sequência de comprimento variável sem comprimento fixo. Ela pode aumentar e diminuir sequências dinâmicas e tem uma largura mais ampla. gama de usos. .

2.1 A fatia consiste em três partes:
  • ponteiro
  • O número de elementos na fatia de comprimento
  • A capacidade vai do início da fatia até o final dos dados subjacentes, ou seja, a quantidade de espaço disponível.
2.2 Definir fatias

Uma fatia é uma sequência de comprimento variável, portanto você pode declarar uma matriz de tamanho não especificado para definir uma fatia.

var 数组名字 []type

 Ou use make definição:

var slice1 []type = make([]type, len)

//也可以简写为
slice1 := make([]type, len)

Além do comprimento, as fatias também possuem o conceito de capacidade. Você pode especificar o comprimento e a capacidade ao declarar a fatia.

s := make([]string,3,10)

Uma nova fatia s1 pode ser criada através de s1 := arr[startIndex:endIndex], e arr pode ser uma matriz. O resto das operações parecem ser semelhantes às fatias de python, mas as fatias de go são mais como uma matriz de comprimento variável ou lista vinculada.

Go suporta a função append() para anexar valores às fatias e a função copy() para copiar fatias.

As fatias são indexáveis ​​e o comprimento pode ser obtido pelo método len().

As fatias fornecem um método para calcular a capacidade, cap(), que pode medir o comprimento que uma fatia pode ter.

3. Mapa

A tabela hash é uma estrutura de dados engenhosa e prática. É uma coleção não ordenada de pares chave-valor, onde todas as chaves são diferentes, e então o valor correspondente pode ser recuperado, atualizado ou excluído dentro de uma complexidade de tempo constante através de uma determinada chave.

Ao obter o valor do Mapa, caso a chave não exista, é retornado um valor zero do tipo, por exemplo, o valor zero do tipo int é 0, e o valor zero do tipo string é " ".

Mapa é um tipo de referência. Se um Mapa for passado para uma função ou atribuído a outra variável, todos eles apontam para a mesma estrutura de dados subjacente, portanto, modificações no Mapa afetarão todas as variáveis ​​que o referenciam.

DefinirMapa

Os mapas podem ser definidos usando a função integrada make ou usando a palavra-chave map:

/* 使用 make 函数 */
map_variable := make(map[KeyType]ValueType, initialCapacity)

Entre eles, KeyType é o tipo de chave, ValueType é o tipo de valor e InitialCapacity é um parâmetro opcional usado para especificar a capacidade inicial do Map. A capacidade do Mapa refere-se ao número de pares de valores-chave que podem ser salvos no Mapa. ​​Quando o número de pares de valores-chave no Mapa atingir a capacidade, o Mapa se expandirá automaticamente. Se inicialCapacity não for especificado, a linguagem Go escolherá um valor apropriado com base na situação real.

// 创建一个初始容量为 10 的 Map
m := make(map[string]int, 10)

// 使用字面量创建 Map
m := map[string]int{
    "student": 1,
    "teacher": 2,
    "school": 3,
}

Obtenha elementos:
// 获取键值对
v1 := m["student"]
v2, result := m["pen"]  // 如果键不存在,result 的值为 false,v2 的值为该类型的零值
Modificar elementos:
// 修改键值对
m["student"] = 5
Percorra o mapa:
// 遍历 Map
for k, v := range m {
    fmt.Printf("key=%s, value=%d\n", k, v)
}
Excluir elementos:
// 删除键值对
delete(m, "teacher")

4. Estrutura

Arrays na linguagem Go podem armazenar o mesmo tipo de dados, mas em estruturas podemos definir diferentes tipos de dados para diferentes itens.

Uma estrutura é uma coleção de dados que consiste em uma série de dados do mesmo tipo ou de tipos diferentes. Use o caso clássico de estrutura para processar as informações dos funcionários da empresa. Cada informação do funcionário contém um número exclusivo do funcionário, nome do funcionário, endereço residencial, data de nascimento, cargo, salário, superiores, etc. Todas essas informações precisam estar vinculadas a uma entidade, que pode ser copiada como uma unidade inteira, usada como parâmetro ou valor de retorno de uma função, ou armazenada em um array, etc.

A definição da estrutura requer o uso de instruções type e struct. A instrução struct define um novo tipo de dados, com um ou mais membros na estrutura. A instrução type define o nome da estrutura. A sintaxe da declaração da estrutura é a seguinte:

type StructName struct{  
    FieldName type  
}

Uma vez definido um tipo de estrutura, ele pode ser usado para declarações de variáveis ​​com a seguinte sintaxe:

variable_name := structure_variable_type {value1, value2...valuen}
或
variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}

Acho que você gosta

Origin blog.csdn.net/weixin_53472334/article/details/132392773
Recomendado
Clasificación