Ir a notas de estudio (70) -Vaya declaración de variable, inicialización de variable, asignación de variable de tipo de valor, asignación de variable de tipo puntero

1. Declaración de variable

Para simplemente declarar una variable, puede varusar la palabra clave, de la siguiente manera:

var s string

Los ejemplos son simplemente declara una variable s, escribe string, y no la inicializa, por lo que es stringun valor cero, es decir, "" (la cadena vacía).

Intentemos declarar una variable de tipo puntero, como se muestra a continuación:

var sp *string

El descubrimiento es posible, pero tampoco se ha inicializado, por lo que su valor es del *stringtipo de valor cero, es decir nil.

2. Inicialización variable

Variable por =asignación de operador es modificar el valor de la variable. Si asigna un valor a una variable cuando la declara, esta operación se llama inicialización de variable.

Si desea inicializar una variable, hay tres formas.

  1. Inicializar directamente en la declaración
var s string = "hello"
  1. Inicializar después de la declaración
var s string
s = "hello"
  1. Usar :=declaración simple
s := "hello"

3. Asignación de diferentes tipos de variables

3.1 Variables de tipo de valor

func main() {
    
    
   var s string
   s = "hello"
   fmt.Println(s)
}

Ejecute el código anterior, puede imprimir normalmente, lo que indica que cuando la variable de tipo de valor no está inicializada, no hay problema con la asignación directa.

3.2 ¿Qué pasa con las variables de tipo puntero?

func main() {
    
    
   var sp *string
   *sp = "hello"
   fmt.Println(*sp)
}

Ejecute estos códigos, verá el siguiente mensaje de error:

panic: runtime error: invalid memory address or nil pointer dereference

Esto se debe a que si no hay una variable de tipo puntero asigna memoria en el valor predeterminado es cero nil, no apunta a la memoria, por lo que no se puede usar, el uso de la fuerza obtendrá más que nilel objetivo incorrecto.

Para los tipos de valor, incluso si solo declara una variable sin inicializarla, la variable tendrá memoria asignada.

En el siguiente ejemplo, declaramos una variable s, no su inicialización, pero podemos &sobtener su dirección de memoria. En realidad, este es un Golenguaje que nos ayuda a hacer, se puede usar directamente.

func main() {
    
    
   var s string
   fmt.Printf("%p\n",&s)
}

¿Por qué var wg sync.WaitGrouplas declaraciones de variables wgno se inicializan también se pueden usar directamente?

Debido a que sync.WaitGroupuna structestructura es un tipo de valor, el Golenguaje asigna memoria automáticamente, puede usarse directamente, no reportar nilanomalías.

Resumen: Si desea asignar un valor a una variable, la variable debe tener una memoria asignada correspondiente, de modo que pueda operar en esta memoria para completar el propósito de la asignación.

Nota: De hecho, más que una asignación para la variable de puntero, si no hay asignación de memoria, el valor de la operación se reportará como niluna excepción, porque la memoria no está operativa.

Por lo tanto, se debe declarar una variable y asignar memoria antes de que se pueda asignar, y luego se puede inicializar cuando se declara. Cuando se declara el tipo de puntero, el Goidioma no asigna memoria automáticamente, por lo que no se le puede asignar, que es diferente del tipo de valor.

Por lo tanto, mapy chantambién porque son esencialmente también un tipo de puntero.

func main() {
    
    
	var d map[string]string
	d["aa"] = "123"
	fmt.Printf("%v\n", d)
}

Error:

panic: assignment to entry in nil map

Supongo que te gusta

Origin blog.csdn.net/wohu1104/article/details/111242722
Recomendado
Clasificación