Notas de estudio del curso "Go Language Lesson 1" (9)

Constantes: ¿Qué innovaciones tiene Go en el diseño de "constantes"?

  • Las innovaciones del lenguaje Go en términos de constantes incluyen las siguientes:
    • Soporte para constantes sin tipo;
    • Soporte para la autotransformación implícita;
    • Se puede utilizar para implementar enumeraciones.

constante

  • Una constante en Go es un elemento de sintaxis creado durante la compilación del código fuente. Es decir, el valor de este elemento se puede inicializar como una variable, pero su expresión de inicialización debe poder evaluar el valor durante la compilación.
    • Una vez que se declara e inicializa una constante Go, su valor permanece constante durante toda la vida del programa.
    • No necesitamos considerar la sincronización del acceso constante al diseñar al mismo tiempo, y la constante creada e inicializada también se puede usar como parte de la expresión inicial de otras constantes.
  • Go declara variables usando la palabra clave var. Para las constantes, el lenguaje Go introduce la palabra clave const para declarar constantes. Además, al igual que var admite la declaración de múltiples variables en una sola línea y la agregación de declaraciones de variables en bloques de código, const también admite la declaración de múltiples constantes en una sola línea y la agregación de declaraciones de constantes en bloques de código:
    const Pi float64 = 3.14159265358979323846 // 单行常量声明
    // 以 const 代码块形式声明常量
    const (
    	size int64 = 4096
    	i, j, s = 13, 14, "bar" // 单行声明多个常量
    )
    
  • La especificación del lenguaje Go estipula que los tipos de constantes Go se limitan a los tipos de datos básicos de Go, incluidos tipos numéricos, tipos de cadenas y tipos booleanos con solo dos valores (verdadero y falso).

constante sin tipo

  • El lenguaje Go tiene requisitos estrictos sobre la seguridad de tipos: incluso si dos tipos tienen el mismo tipo subyacente, siguen siendo tipos de datos diferentes y no se pueden comparar entre sí ni mezclar en una expresión para su operación. Este requisito se aplica no sólo a las variables, sino también a las constantes escritas.
  • Cuando las constantes y variables de tipo se mezclan para el cálculo y la evaluación, también se debe cumplir con el requisito del mismo tipo; de lo contrario, solo podremos hacer que el código funcione correctamente mediante una transformación explícita.
  • A una constante no se le asigna explícitamente un tipo cuando se declara. En Go, dicha constante se denomina constante sin tipo (Constante sin tipo).
  • Una constante sin tipo no significa que realmente no tenga tipo. También tiene su propio tipo predeterminado, pero su tipo predeterminado se determina de acuerdo con su forma de valor inicial.

conversión implícita

  • La conversión implícita significa que para la evaluación de expresiones que involucran constantes sin tipo, el compilador Go convertirá automáticamente las constantes sin tipo al tipo correspondiente de acuerdo con la información de tipo en el contexto y luego participará en el cálculo de la evaluación.
  • Pero dado que el objeto transformado es una constante, esto no causa problemas de seguridad de tipos y el compilador Go garantizará la seguridad de esta transformación.

implementar enumeración

  • De hecho, el lenguaje Go no proporciona tipos de enumeración de forma nativa. En el lenguaje Go, podemos usar la colección constante definida por el bloque de código constante para implementar la enumeración.
  • Primero, la sintaxis constante de Go proporciona un mecanismo para "repetir implícitamente la expresión no nula anterior":
    const (
    	Apple, Banana = 11, 22
    	Strawberry, Grape
    	Pear, Watermelon
    )
    
    • En este código, a las dos últimas líneas de la definición constante no se les asigna explícitamente un valor inicial, por lo que el compilador Go usa automáticamente la expresión de la línea anterior para ellas:
      const (
      	Apple, Banana = 11, 22
      	Strawberry, Grape = 11, 22
      	Pear, Watermelon = 11, 22
      )
      
    • Sin embargo, simplemente repetir la línea anterior obviamente no puede satisfacer el requisito de "enumeración", porque el valor de cada constante de enumeración en el tipo de enumeración es único. Por lo tanto, Go proporciona un "artefacto" basado en esta característica: iota.
      • iota es un identificador predefinido del lenguaje Go, que representa el valor de desplazamiento (comenzando desde cero) de cada constante en el bloque de declaración constante (incluida la declaración de una sola línea).
      • Al mismo tiempo, el iota en cada fila también es una constante sin tipo, que puede participar automáticamente en el proceso de evaluación de diferentes tipos, sin que necesitemos realizar operaciones de transformación explícitas sobre él.
        const (
        	Apple, Banana = iota, iota + 10 // 0, 10 (iota = 0)
        	Strawberry, Grape // 1, 11 (iota = 1)
        	Pear, Watermelon // 2, 12 (iota = 2)
        )
        
    • Si hay diferentes enumeraciones definidas por múltiples bloques de código constante en un archivo fuente de Go, el iota en cada bloque de código constante también cambia de forma independiente, es decir, cada bloque de código constante tiene su propio iota.
    • La vida útil de cada iota comienza al comienzo de un bloque de código constante y finaliza cuando finaliza ese bloque de código constante.

Supongo que te gusta

Origin blog.csdn.net/fangzhan666/article/details/132402433
Recomendado
Clasificación