Sobes.tech
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:
	// Навъи номаълум
}