Golangではnilを使用する場合が多くあります。例えば:
func (u *URL) Parse(ref string) (*URL, error) {
refurl, err := Parse(ref)
if err != nil {
return nil, err
}
return u.ResolveReference(refurl), nil
}
しかし、次のように使用することはできません。
var str string //or var str int
str = nil
golangコンパイラはcan't use nil as type string in assignment
エラーをスローします。
nil
は、構造体とインターフェイスのポインターにのみ使用できるようです。その場合、-それはどういう意味ですか?および他のオブジェクトと比較するとき、どのように比較しますか、つまりgolangは1つのオブジェクトをどのように決定しますかnil?
編集:たとえば、インターフェースがnilの場合、そのタイプと値は同時にnilでなければなりません。golangはこれをどのように行うのですか?
Goでは、nil
はポインター、インターフェイス、マップ、スライス、チャネル、および関数タイプのゼロ値であり、uninitialized値。
nil
は何らかの「未定義」状態を意味するものではなく、それ自体が適切な値です。 Goのオブジェクトは、その値がnil
である場合にのみ、nil
です。これは、前述のタイプのいずれかである場合のみ可能です。
error
はインターフェイスなので、nil
とは異なり、string
は1つの有効な値です。明らかな理由により、nil
エラーはエラーなしを表します。
Goのnil
は、単に他の言語のNULL
ポインター値です。
ポインターまたはインターフェイスの代わりに効果的に使用できます(インターフェイスはややポインターです)。
エラータイプはインターフェイスです であるため、エラーとして使用できます。
Goでは文字列は値であるため、文字列として使用することはできません。
nil
はGoでは型指定されていません。つまり、次のことはできません。
var n = nil
ここではn
の型が不足しているためです。ただし、できます
var n *Foo = nil
nil
はポインターとインターフェイスのゼロ値であり、初期化されていないポインターとインターフェイスはnil
になります。