特徴
Go言語でnilはユニバースブロックで定義されています。ユニバースブロックとは公式によるとGo言語でのユニバースブロックとはソースコード全体を包んでいるブロックを示します。これはプログラム全体のスコープを指し、すべてのプログラムで共通に使用される識別子や型が含まれています。
実装
main.go
package main
func main() {
nil := 42 // ここでnilを再定義
var ptr *int
if ptr == nil { // 本来のnilの意味が失われている
println("ptr is nil")
}
}
上記の実装では、本来のnilの性質をシャドーイングしバグが発生しやすくなります。
参考記事
The Go Programming Language Specification - The Go Programming Language