Junior — Middle
Qual è la differenza tra l'espressione di un'interfaccia vuota e il valore nil nel linguaggio Go?
sobes.tech AI
Risposta dell'AI
Nel linguaggio Go, l'interfaccia vuota (interface{}) è un tipo che può contenere un valore di qualsiasi tipo, incluso nil. Tuttavia, l'espressione di un'interfaccia vuota e il valore nil sono due cose diverse.
var x interface{}— una variabilexdi tipo interfaccia vuota, che di default è uguale anil, cioè non contiene né tipo né valore.- Ma se si assegna a
xun valore, ad esempiox = 5, alloraxnon è piùnil, poiché contiene il tipointe il valore5.
La differenza sta nel fatto che l'interfaccia in Go è rappresentata internamente da due puntatori: uno al tipo e uno al valore. L'interfaccia è uguale a nil solo se entrambi i puntatori sono nil.
Esempio:
var i interface{} // i == nil
var p *int = nil
i = p // i != nil, poiché il tipo *int è presente, anche se il valore è `nil`
fmt.Println(i == nil) // false
Pertanto, un'interfaccia vuota può contenere un valore nil di un tipo specifico, ma l'interfaccia stessa non sarà uguale a nil. Questo è un punto importante nelle verifiche di nil in Go.