Sobes.tech
Junior — Middle

Čime se razlikuje izraz praznog interfejsa od vrednosti nil u jeziku Go?

sobes.tech АИ

Одговор од АИ

U jeziku Go, prazan interfejs (interface{}) je tip koji može sadržavati vrednost bilo kog tipa, uključujući nil. Međutim, izraz praznog interfejsa i vrednost nil su dve različite stvari.

  • var x interface{} — promenljiva x tipa praznog interfejsa, koja po defaultu je jednaka nil, tj. ne sadrži ni tip ni vrednost.
  • Ali ako joj dodelite neku vrednost, na primer x = 5, onda x više nije nil, jer sadrži tip int i vrednost 5.

Razlika je u tome što je interfejs u Go internim putem predstavljen sa dva pokazivača: na tip i na vrednost. Interfejs je jednak nil samo ako su oba pokazivača nil.

Primer:

var i interface{} // i == nil
var p *int = nil

 i = p // i != nil, jer tip *int postoji, iako je vrednost `nil`

fmt.Println(i == nil) // false

Dakle, prazan interfejs može sadržavati vrednost nil određenog tipa, ali sam interfejs neće biti jednak nil. Ovo je važna tačka pri proverama na nil u Go.