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-ում։