Skip to content
Related Articles

Related Articles

Improve Article

How to check pointer or interface is nil or not in Golang?

  • Last Updated : 10 May, 2020

In Golang, nil check is frequently seen in GoLang code especially for error check. In most cases, nil check is straight forward, but in interface case, it’s a bit different and special care needs to be taken.

Here the task is to check pointer or interface is nil or not in Golang, you can check with the following:

Example 1: In this example, the pointer is checked whether it is a nil pointer or not.




// 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)
}

Output:

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

Example 2: In this example, the interface is checked whether it is a nil interface or not.






// 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)
  
}

Output:

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

Example 3: In this example, the interface holding a nil pointer is checked whether it is a nil interface or not.




// 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))
}

Output:

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



My Personal Notes arrow_drop_up
Recommended Articles
Page :