Sobes.tech
Middle+

Жалпы программалоо үчүн кандай каражаттар бар?

sobes.tech AI

AIден жооп

Golang-da quyidagi umumiy dasturlash vositalari (generiklar) mavjud:

  1. Parametrli turlar: Tuzilma, interfeyslar va funksiyalarni yaratishga imkon beradi, ular turli ma'lumot turlari bilan ishlashlari mumkin, ularni qat'iy tarzda belgilashsiz. Ma'lumot turlari tur yoki funksiyaning nomidan keyin kvadrat qavslar ichida ko'rsatiladi.

    // Parametrli tur bilan tuzilma misoli
    type Stack[T any] struct {
    	elements []T
    }
    
    // Parametrli turlar bilan funksiya misoli
    func Map[T, U any](collection []T, f func(T) U) []U {
    	result := make([]U, len(collection))
    	for i, item := range collection {
    		result[i] = f(item)
    	}
    	return result
    }
    
  2. Тип чекловлари (Type Constraints): Типларнинг умумийлигини чеклаш ва амалиётларнинг хавфсизлигини таъминлаш учун уларнинг тўпламини аниқлайди.

    • Интерфейслар: Ҳар қандай интерфейс ўз-ўзидан тип чекловидир.
    • Кўплатилган интерфейслар: Бир нечта тур ёки интерфейсларни | оператори ёрдамида бирлаштириш имконини беради.
    // Кўплатилган интерфейсдан фойдаланган тип чеклови мисоли
    type Number interface {
    	int | int8 | int16 | int32 | int64 |
    		uint | uint8 | uint16 | uint32 | uint64 | uintptr |
    		float32 | float64 |
    		complex64 | complex128
    }
    
    // Тип чекловидан фойдаланган функция
    func Add[T Number](a, b T) T {
    	return a + b
    }
    

Бу воситалар Go 1.18да қўшилган. Улардан аввал, шунга ўхшаш функцияларни амалга ошириш учун интерфейслар (interface{}) ва рефлексиядан фойдаланилган, бу эса тип хавфсизлиги ва ишлаш самарадорлигини камайтирган.