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