Junior
Роли интерфейси холӣ дар забони Go чист?
sobes.tech AI
Ҷавоб аз AI
Интерфейси interface{} дар Go метавонад арзишҳои ҳар гуна навъро нигоҳ дорад. Ин барои ҳолатҳои зерин муфид аст:
- Функсияҳое, ки бо навъҳои маълумоти номаълум дар вақти компилятсия кор мекунанд. Масалан, китобхонаи стандартии
fmt.Printlnаргументҳоро аз навъиinterface{}қабул мекунад. - Ҳифз кардани навъҳои омехта дар коллексияҳо. Тасҳеҳ
[]interface{}метавонад унсурҳои навъҳои гуногунро дар бар гирад. - Иҷрои полиморфизм вақте ки навъҳои мушаххас пешакӣ маълум нестанд.
Аммо, истифодаи интерфейси холӣ талаб мекунад, ки дар вақти иҷрои баррасии навъ (type assertion) ё гузариши навъ (type switch) анҷом дода шавад, то ба арзиши воқеӣ ва усулҳои он дастрасӣ пайдо шавад, ки метавонад камтар бехатар ва камтар самаранок бошад нисбат ба истифодаи навъҳои мушаххас ё интерфейсҳои махсус.
// Намунаи истифодаи интерфейси холӣ
var data interface{}
data = 10 // data ҳоло нигоҳ медорад int
ndata = "hello" // data ҳоло нигоҳ медорад string
ndata = true // data ҳоло нигоҳ медорад bool
// Баррасии навъ барои дастрасӣ ба арзиш
if value, ok := data.(string); ok {
// value - ин string
_ = value
}
// Гузариши навъ
switch v := data.(type) {
case int:
// v - ин int
_ = v
case string:
// v - ин string
_ = v
default:
// Навъи номаълум
}