Ir a aprendizaje de idiomas tipo 6-diccionario

3. Ir a tipos de datos de idioma

En el artículo anterior, presentamos el tipo de segmento del idioma Go. En este artículo, aprenderemos sobre el tipo de diccionario del idioma Go.

3.4 Diccionarios

En el idioma Go, el nombre oficial del tipo de diccionario es Map, que es una implementación de Hash Table.

3.4.1 Notación de tipo

Si el tipo de clave de un tipo de diccionario es K y el tipo de elemento es T, entonces el tipo literal utilizado para representar el tipo de diccionario:

map[K]T

El tipo de elemento en la declaración de tipo de diccionario puede ser cualquier tipo de datos de idioma Go válido (excepto el tipo de función, el tipo de diccionario o el tipo de segmento). Los tipos de claves deben ser comparables. Si el tipo de clave del tipo de diccionario es un tipo de interfaz, entonces se requiere que el tipo dinámico de cada valor de clave en el valor de diccionario de este tipo sea comparable durante la ejecución del programa. De lo contrario, se generará una excepción de tiempo de ejecución durante la operación correspondiente. como sigue:

map[int]string                               //合法
map[string]struct{name, department string}   //合法
map[string]interface{}                       //合法
map[[]int]string                             //不合法
map[map[int]string]string                    //不合法

3.4.2 Notación de valor

Los valores del diccionario se pueden representar mediante literales compuestos.

Un valor de diccionario de tipo map [string] bool:

map[string]bool{"Vim": true, "Emacs": true, "LiteIDE": true, "Notepad": false}

Un valor de diccionario vacío que no contiene ningún par clave-valor:

map[string]bool{}

3.4.3 Propiedades y operaciones básicas

Al igual que el tipo de puntero y el tipo de sector, el tipo de diccionario es un tipo de referencia. Al igual que los valores de sector, un valor de diccionario siempre tendrá una referencia al valor de una estructura de datos subyacente.

Punto de conocimiento : en el lenguaje Go, solo hay "pasar por valor" pero no "pasar por referencia". Si el cambio del valor del parámetro dentro de la función se reflejará fuera de la función (o si se reflejará en el valor original del valor del parámetro) depende solo de si el tipo del valor cambiado es un tipo de valor o un tipo de referencia.

Como el tipo de diccionario es un tipo de referencia, su valor cero es nulo . Una variable de tipo diccionario con un valor de nil es similar a un diccionario vacío con una longitud de 0. Leerlo no causará ningún error, pero escribir en él (agregar o eliminar pares clave-valor) causará un pánico en el tiempo de ejecución. El valor de una variable de tipo diccionario sin inicializar es nulo .

Declare e inicialice una variable de tipo de diccionario de la siguiente manera:

editorSign := map[string]bool{"LiteIDE": true, "Notepad": false}

Agregue pares clave-valor de la siguiente manera:

editorSign["Vim"] = true

Busque y obtenga el valor del elemento correspondiente al valor de clave especificado en un diccionario a través de la expresión de índice, de la siguiente manera:

sign1 := editorSign["Vim"]

Cuando no hay un par clave-valor con la clave "Vim" en el valor de editorSign, a la variable sign1 se le asignará el valor cero del tipo de elemento de editorSign, es decir, falso.

sign1, ok := editorSign["Vim"]

La variable ok será de tipo booleano y su valor indica si existe un par clave-valor con la clave "Vim" en el valor de editorSign.
Elimine los pares clave-valor de la siguiente manera:

delete(editorSign, "Vim")

Nota : ¡Los valores del diccionario no son seguros para la simultaneidad! El lenguaje Go cree oficialmente que el control de acceso seguro en escenarios de subprocesos múltiples no es necesario en la mayoría de los lugares donde se utilizan valores de diccionario. Para garantizar la seguridad de la concurrencia, debe utilizar el tipo de estructura RWMutex en la sincronización del paquete de código de biblioteca estándar (un mutex de lectura y escritura, que a menudo se utiliza para el control de concurrencia en un entorno multiproceso). Esto se explica temporalmente en la publicación de blog de seguimiento.

Supongo que te gusta

Origin blog.csdn.net/u012855229/article/details/115367479
Recomendado
Clasificación