valores predeterminados y distinguiendo campos no inicializados en Go
en Go, los tipos primitivos tienen valores predeterminados. Por ejemplo, los enteros (int) se inicializan a 0. Sin embargo, cuando se trabaja con estructuras, distinguiendo entre un valor 0 y un campo no inicializado puede ser un desafío.
, considere el código a continuación:
package main import "log" type test struct { testIntOne int testIntTwo int } func main() { s := test{testIntOne: 0} log.Println(s) }
En este código, tanto testIntone como testIntTwo son cero. Sin embargo, TestIntone se ha establecido explícitamente en 0, mientras que TestIntTwo ha sido inicializado por el valor predeterminado. Esta ambigüedad puede conducir a la confusión para determinar qué campos se han establecido explícitamente.
¿Es posible distinguir entre estos dos casos?
no, vaya no rastrea si un campo se ha establecido o no. Por lo tanto, es imposible saber si un valor cero es el resultado de la inicialización o una asignación intencional.
spoilounds
type test struct { testIntOne *int testIntTwo *int }
type test struct { testIntOne int testIntTwo bool // Tracks if testIntTwo has been set } func (t *test) SetTestIntTwo(val int) { t.testIntTwo = val t.isSetTestIntTwo = true } func main() { s := test{} s.SetTestIntTwo(0) fmt.Println(s.isSetTestIntTwo) // Output: true }
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3