Open In App

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

Last Updated : 10 May, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

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


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads