Sobes.tech
Middle+

Millised üldprogrammeerimise vahendid on olemas?

sobes.tech AI

Vastus AI-lt

Golangil on järgmised üldprogrammeerimise (generike) vahendid:

  1. Parameetrite tüübid: Võimaldavad luua struktuure, liideseid ja funktsioone, mis saavad töötada erinevate andmetüüpidega ilma nende rangelt määramata kompileerimise ajal. Andmetüübid märgitakse sulgudes pärast tüübi või funktsiooni nime.

    // Näide parameetritüüpi struktuurist
    type Stack[T any] struct {
    	elements []T
    }
    
    // Näide parameetritüüpi funktsioonist
    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. Tüübipiirangud (Type Constraints): Määratlevad komplekti tüüpe, mida saab kasutada generikute parameetritena. Need võimaldavad piirata tüüpide universaalsust ja tagada operatsioonide turvalisus.

    • Liideseid: Iga liides ise on tüüpi piirang.
    • Liitliideseid: Võimaldavad ühendada mitu tüüpi või liidest | operaatoriga.
    // Näide tüüpi piirangust, kasutades liitliidest
    type Number interface {
    	int | int8 | int16 | int32 | int64 |
    	uint | uint8 | uint16 | uint32 | uint64 | uintptr |
    	float32 | float64 |
    	complex64 | complex128
    }
    
    // Funktsioon, mis kasutab tüüpi piirangut
    func Add[T Number](a, b T) T {
    	return a + b
    }
    

Need vahendid lisati Go 1.18 versiooni. Enne seda kasutati sarnase generiku funktsionaalsuse rakendamiseks liideseid (interface{}) ja refleksiooni, mis vähendas tüübi turvalisust ja jõudlust.