Sobes.tech
Junior — Middle

Дар бораи чӣ фарқ мекунад изҳороти интерфейси холӣ аз арзиши nil дар забони Go?

sobes.tech AI

Ҷавоб аз AI

Дар забони Go, интерфейси холӣ (interface{}) як навъи аст, ки метавонад арзиши ҳар гуна навъро дар бар гирад, аз ҷумла nil. Аммо, изҳороти интерфейси холӣ ва арзиши nil ду чизи гуногун мебошанд.

  • var x interface{} — тағйирёбандаи x аз навъи интерфейси холӣ, ки дар ҳолати пешфарз баробар бо nil аст, яъне на навъ, на арзишро дар бар намегирад.
  • Агар ба x арзише таъин кунед, масалан x = 5, пас x дигар nil нест, зеро он навъи int ва арзиши 5-ро дорад.

Фарқ дар он аст, ки интерфейс дар Go дар дохилӣ тавассути ду ишорагардонкарда нишон дода мешавад: ба навъ ва ба арзиш. Интерфейс танҳо дар сурате баробар бо nil аст, ки ҳарду ишорагардон nil бошанд.

Масал:

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

 i = p // i != nil, зеро навъи *int вуҷуд дорад, ҳатто агар арзиш `nil` бошад

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

Аз ин рӯ, интерфейси холӣ метавонад арзиши nil-ро аз навъи муайян дар бар гирад, аммо худи интерфейс бо nil баробар нахоҳад буд. Ин нуқтаи муҳим дар санҷишҳои nil дар Go мебошад.