Sobes.tech
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 variabile x di tipo interfaccia vuota, che di default è uguale a nil, cioè non contiene né tipo né valore.
  • Ma se si assegna a x un valore, ad esempio x = 5, allora x non è più nil, poiché contiene il tipo int e il valore 5.

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.