Sobes.tech
Junior — Middle

Go тилинде боштондуул интерфейс билдирүүсү менен nil мааниси кандай айырмаланат?

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 текшерүүлөрдө маанилүү учур.