最終更新日: 2026-07-25
TOP(About this memo)) > 一覧(Go) > nil
import (
"fmt"
"reflect"
)
func main() {
// 型のないnilのvariableはコンパイルエラーとなる
// var a = nil // use of untyped nil in variable declaration
// ポインタ型には格納できる
var a *int = nil
fmt.Printf("%v, %v \n", reflect.TypeOf(a), reflect.ValueOf(a))// *int, <nil>
// interface型にも格納できる
var ii i = nil
fmt.Printf("%v, %v \n", reflect.TypeOf(ii), reflect.ValueOf(ii))// <nil>, <invalid reflect.Value>
var err error = nil
fmt.Printf("%v, %v \n", reflect.TypeOf(err), reflect.ValueOf(err))// <nil>, <invalid reflect.Value>
var iii i = (*int)(nil)
fmt.Printf("%v, %v \n", reflect.TypeOf(iii), reflect.ValueOf(iii))// *int, <nil>
}
package main
func main() {
f(nil)// ポインターの場合はnilを持つことができるため問題ない。
//f2(nil)// Cannot infer T
f2((*string)(nil))
f2[any](nil)// なお、これでも通る
}
func f(a *string) {}
func f2[T any](a T) {}
//println(nil == nil) // operator == not defined on untyped nil
//println((*int32)(nil) == (*int64)(nil)) //mismatched types *int32 and *int64
println((*int32)(nil) == (*int32)(nil)) // true
println((*int32)(nil) == nil) // これも、true
println(nil == (error)(nil))// これもtrue
println(reflect.ValueOf((*int32)(nil)).IsNil()) // true