¿Cómo comprobar que el puntero o la interfaz son nulos o no en Golang?

En Golang , la verificación nula se ve con frecuencia en el código de GoLang, especialmente para la verificación de errores. En la mayoría de los casos, la verificación de cero es sencilla, pero en el caso de la interfaz, es un poco diferente y se debe tener especial cuidado.

Aquí la tarea es verificar que el puntero o la interfaz sean nulos o no en Golang, puede verificar con lo siguiente:

Ejemplo 1: En este ejemplo, el puntero se comprueba si es un puntero nulo o no.

// Go program to illustrate how to
// check pointer is nil or not
  
package main
  
import (
    "fmt"
)
  
type Temp struct {
}
  
func main() {
    var pnt *Temp // pointer
    var x = "123"
    var pnt1 *string = &x
  
    fmt.Printf("pnt is a nil pointer: %v\n", pnt == nil)
    fmt.Printf("pnt1 is a nil pointer: %v\n", pnt1 == nil)
}

Producción:

pnt is a nil pointer: true
pnt1 is a nil pointer: false

Ejemplo 2: En este ejemplo, se comprueba si la interfaz es una interfaz nula o no.

// Go program to illustrate how to
// check interface is nil or not
  
package main
  
import (
    "fmt"
)
  
// Creating an interface
type tank interface {
  
    // Methods
    Tarea() float64
    Volume() float64
}
  
type myvalue struct {
    radius float64
    height float64
}
  
// Implementing methods of
// the tank interface
func (m myvalue) Tarea() float64 {
  
    return 2*m.radius*m.height +
        2*3.14*m.radius*m.radius
}
  
func (m myvalue) Volume() float64 {
  
    return 3.14 * m.radius * m.radius * m.height
}
  
func main() {
  
    var t tank
    fmt.Printf("t is a nil interface: %v\n", t == nil)
  
    t = myvalue{10, 14}
  
    fmt.Printf("t is a nil interface: %v\n", t == nil)
  
}

Producción:

t is a nil interface: true
t is a nil interface: false

Ejemplo 3: En este ejemplo, la interfaz que contiene un puntero nulo se verifica si es una interfaz nula o no.

// Go program to illustrate how to
// check interface holding a nil
// pointer is nil or not
  
package main
  
import (
    "fmt"
)
  
type Temp struct {
}
  
func main() {
  
    // taking a pointer
    var val *Temp
  
    // taking a interface
    var val2 interface{}
  
    // val2 is a non-nil interface
    // holding a nil pointer (val)
    val2 = val
  
    fmt.Printf("val2 is a nil interface: %v\n", val2 == nil)
  
    fmt.Printf("val2 is a interface holding a nil"+
            " pointer: %v\n", val2 == (*Temp)(nil))
}

Producción:

val2 is a nil interface: false
val2 is a interface holding a nil pointer: true

Publicación traducida automáticamente

Artículo escrito por SHUBHAMSINGH10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *