Sobes.tech
Junior — Middle

Kā atšķiras tukšas saskarnes izteiksme no nil vērtības Go valodā?

sobes.tech AI

Atbilde no AI

Go valodā tukšais interfeiss (interface{}) ir tips, kas var saturēt jebkāda veida vērtību, tostarp nil. Tomēr, tukšā interfeisa izteiksme un vērtība nil ir divas dažādas lietas.

  • var x interface{} — mainīgais x ir tukša interfeisa tips, kas pēc noklusējuma ir vienāds ar nil, tas ir, tas nesatur ne tipu, ne vērtību.
  • Bet, ja tam piešķir kādu vērtību, piemēram, x = 5, tad x vairs nav nil, jo tas satur int tipu un vērtību 5.

Atšķirība ir tā, ka Go iekšēji interfeiss ir attēlots ar diviem norādītājiem: uz tipu un uz vērtību. Interfeiss ir vienāds ar nil tikai tad, ja abi norādītāji ir nil.

Piemērs:

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

 i = p // i nav `nil`, jo `*int` tips ir klātesošs, pat ja vērtība ir `nil`

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

Tādējādi, tukšs interfeiss var saturēt nil vērtību konkrētam tipam, bet pats interfeiss nebūs nil. Tas ir svarīgs punkts nil pārbaudēs Go valodā.