"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo diferenciar entre valores predeterminados y explícitamente cero en las estructuras GO?

¿Cómo puedo diferenciar entre valores predeterminados y explícitamente cero en las estructuras GO?

Publicado el 2025-03-12
Navegar:956

How Can I Differentiate Between Default and Explicitly Set Zero Values in Go Structs?

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

  • use Pointers: Pointer nil.
type test struct {
    testIntOne *int
    testIntTwo *int
}
  • crea un método de setter: puede crear un método para establecer el valor de un campo y rastrear si se ha establecido.
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
}
Último tutorial Más>

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