Sobes.tech
Middle

Чӣ тавр мувофиқати сохтор бо интерфейсро дар Go санҷидан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Дар Go, мувофиқати сохтор бо интерфейс ғайрирасмӣ дар вақти компилятсия санҷида мешавад. Агар сохтор ҳамаи усулҳои талабшудаи интерфейсро иҷро кунад, он ба таври автоматӣ бо ин интерфейс мувофиқ ҳисобида мешавад. Нигоҳ доштани мувофиқати расмӣ зарур нест.

Маслиҳатҳо барои санҷиши мувофиқати дар вақти компилятсия:

  1. Таъин кардани сохтор ба тағйирёбандаи навъи интерфейс.
  2. Истифодаи сохтор дар функсияе, ки аргументи навъи интерфейсро интизор аст.

Масалан бо таъин:

// Тартиб додани интерфейс
type MyInterface interface {
	DoSomething()
	GetValue() int
}

// Тартиб додани сохтор, ки бояд бо интерфейс мувофиқ бошад
type MyStruct struct {
	value int
}

// Усулҳои сохтор, ки MyInterface-ро иҷро мекунанд
func (s MyStruct) DoSomething() {
	// логика
}

func (s MyStruct) GetValue() int {
	return s.value
}

// Санҷиши мувофиқати дар вақти компилятсия:
// Мисол, таъин кардани намунаи сохтор ба тағйирёбандаи навъи интерфейс.
// Агар MyStruct MyInterface-ро иҷро накунад, хатогӣ медиҳад.
var _ MyInterface = MyStruct{}

Масалан бо гузаронидан ба функсия:

// Функсия, ки аргументи навъи интерфейс MyInterface-ро қабул мекунад
func Process(item MyInterface) {
	item.DoSomething()
	_ = item.GetValue() // истифодаи арзиш
}

// Дар ҷои дигар дар код:
// Сохтани намунаи MyStruct
myInstance := MyStruct{value: 42}

// Гузаронидани намунаи сохтор ба функсия, ки интизор аст интерфейсро
// Агар MyStruct MyInterface-ро иҷро накунад, хатогӣ медиҳад.
Process(myInstance)

Ин усулҳо кафолат медиҳанд, ки сохтор пеш аз оғози иҷрои барнома мувофиқ бо интерфейс муайяншуда аст, ки ин як ҷузъи муҳими бехатарии навъҳо дар Go мебошад.