Sobes.tech
Middle+

Go-da ümumi kod yazmağın hansı yolları var?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində ümumi kod yazmağın aşağıdakı əsas üsulları mövcuddur:

  • İnterfeyslər: Müəyyən bir metodlar toplusunu ödəyən hər hansı bir tip ilə işləyən funksiyalar yazmağa imkan verir.

    // Reader interfeisinin tərifi
    type Reader interface {
        Read(p []byte) (n int, err error)
    }
    
    // Reader-i həyata keçirən hər hansı bir tip ilə işləyən funksiya
    func ProcessData(r Reader) error {
        // Reader-dan məlumat oxuma
        return nil
    }
    
  • Boş interfejs (interface{}): Hər hansı bir dəyəri təmsil edə bilən ümumi tip. İstifadə etməzdən əvvəl tipə çevirmə tələb edir.

    func PrintAnything(v interface{}) {
        // Tipə çevirmə və yoxlama
        if s, ok := v.(string); ok {
            fmt.Println("Bu bir sətirdir:", s)
        } else if i, ok := v.(int); ok {
            fmt.Println("Bu bir tam ədəddir:", i)
        }
    }
    
  • Generics / Tip parametrli tiplər (type parameters): Deklarasiya zamanı müxtəlif tiplər toplusu ilə işləyən funksiyalar və tiplər yazmağa imkan verir. Go 1.18-də əlavə olunub.

    // Hər hansı T tipi ilə dilimlə işləyən funksiya
    func PrintSlice[T any](s []T) {
        for _, v := range s {
            fmt.Println(v)
        }
    }
    
    // T1 və T2 parametrləri ilə ümumi Pair tipi
    type Pair[T1, T2 any] struct {
        First T1
        Second T2
    }
    
  • Refleksiya (reflect): Tipləri və dəyərləri iş vaxtında araşdırmağa və onlarla qarşılıqlı əlaqəyə imkan verir. Çox vaxt mürəkkəb ssenarilər üçün istifadə olunur, amma digər yanaşmalardan daha az effektiv və təhlükəsiz ola bilər.

    import "reflect"
    
    func GetTypeName(v interface{}) string {
        return reflect.TypeOf(v).Name()
    }
    

Yöntəm seçimi konkret tapşırıq və tələb olunan elastiklik və performans səviyyəsindən asılıdır. Müasir Go-da ümumi algoritmlər və məlumat strukturları yaratmaq üçün generiklər üstünlük təşkil edir. İnterfeyslər çoxşaxəlilik və davranışın müəyyənləşdirilməsi üçün əsas mexanizmdir. Boş interfejs və refleksiya daha az istifadə olunur, daha çox xüsusi hallarda.