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