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.
package main
import (
"fmt"
)
type Temp struct {
}
func main() {
var pnt *Temp
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.
package main
import (
"fmt"
)
type tank interface {
Tarea() float64
Volume() float64
}
type myvalue struct {
radius float64
height float64
}
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.
package main
import (
"fmt"
)
type Temp struct {
}
func main() {
var val *Temp
var val2 interface{}
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
Last Updated :
10 May, 2020
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...