Sobes.tech
Junior — Middle

Ҳаракатҳое, ки бо тағйирёбандаи навъи Map, ки ҳанӯз инициализатсия нашудааст, иҷозат дода мешаванд?

sobes.tech AI

Ҷавоб аз AI

Дар забони Go, тағйирёбандаи навъи map ба таври пешфарзӣ арзиши nil дорад, агар он инициализатсия нашуда бошад.

Бо map nil имкон дорад амалҳои зерин:

  • Хондани арзиш аз рӯи калид — арзиши сифрии навъи ва рамзи набудани калидро бармегардонад.
  • Санҷиши мавҷудияти калид бо истифода аз value, ok := map[key].

Амалиётҳое, ки иҷозат дода намешаванд:

  • Навишт (таъин кардани арзиш ба калид) боиси panic мешавад.
  • Звон кардани функсияҳое, ки харитаи маълумотро тағйир медиҳанд (масалан, delete) дар map nil бехатар аст ва panic намекунад.

Масал:

var m map[string]int // m == nil

v, ok := m["key"] // ok == false, v == 0

// m["key"] = 10 // panic: таъин ба map-и nil

delete(m, "key") // бехатар, чизе намекунад

Барои истифодаи харита барои навишт, бояд онро инициализатсия кард, масалан, бо истифода аз make:

m = make(map[string]int)
m["key"] = 10 // акнун кор мекунад