How to check pointer or interface is nil or not in Golang?
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
Please Login to comment...