Sobes.tech
Middle+

Koja sredstva opšte programiranja postoje?

sobes.tech АИ

Одговор од АИ

U Golangu postoje sledeća sredstva za generičko programiranje:

  1. Parametrizovani tipovi: Omogućavaju kreiranje struktura, interfejsa i funkcija koje mogu raditi sa različitim tipovima podataka bez njihovog strogo definisanja u fazi kompajliranja. Tipovi podataka se navode u uglastim zagradama nakon imena tipa ili funkcije.

    // Primer strukture sa parametrizovanim tipom
    type Stack[T any] struct {
    	elements []T
    }
    
    // Primer funkcije sa parametrizovanim tipovima
    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. Ograničenja tipova (Type Constraints): Definišu skupove tipova koji mogu biti korišćeni kao generički parametri. Omogućavaju ograničavanje univerzalnosti tipova i obezbeđuju sigurnost operacija.

    • Interfejsi: Svaki interfejs sam po sebi predstavlja ograničenje tipa.
    • Kombinovani interfejsi: Omogućavaju spajanje više tipova ili interfejsa pomoću operatora |.
    // Primer ograničenja tipa korišćenjem kombinovanog interfejsa
    type Number interface {
    	int | int8 | int16 | int32 | int64 |
    		uint | uint8 | uint16 | uint32 | uint64 | uintptr |
    		float32 | float64 |
    		complex64 | complex128
    }
    
    // Funkcija koja koristi ograničenje tipa
    func Add[T Number](a, b T) T {
    	return a + b
    }
    

Ova sredstva su dodata u Go 1.18. Pre toga, za implementaciju sličnih funkcionalnosti koristile su se interfejsi (interface{}) i refleksija, što je smanjivalo sigurnost tipova i performanse.