Sobes.tech
Middle+

Go'da genel kod yazmanın hangi yolları vardır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde genel kod yazmanın temel yolları şunlardır:

  • Arayüzler (Interfaces): Belirli bir metod kümesini karşılayan herhangi bir tip ile çalışan fonksiyonlar yazmaya olanak tanır.

    // Reader arayüzünün tanımı
    type Reader interface {
        Read(p []byte) (n int, err error)
    }
    
    // Reader'ı uygulayan herhangi bir tip ile çalışan fonksiyon
    func ProcessData(r Reader) error {
        // Reader'dan veri okuma
        return nil
    }
    
  • Boş arayüz (interface{}): Herhangi bir değeri temsil edebilen evrensel bir tip. Kullanımdan önce tip dönüşümü gerektirir.

    func PrintAnything(v interface{}) {
        // Tip kontrolü ile tip dönüşümü
        if s, ok := v.(string); ok {
            fmt.Println("Bu bir dize:", s)
        } else if i, ok := v.(int); ok {
            fmt.Println("Bu bir tam sayı:", i)
        }
    }
    
  • Generics / Parametreli tipler (type parameters): Tanımlama sırasında herhangi bir tip kümesi ile çalışan fonksiyonlar ve tipler yazmaya olanak tanır. Go 1.18 ile eklendi.

    // Herhangi bir T tipi dilim ile çalışan fonksiyon
    func PrintSlice[T any](s []T) {
        for _, v := range s {
            fmt.Println(v)
        }
    }
    
    // T1 ve T2 parametreleri ile genel Pair tipi
    type Pair[T1, T2 any] struct {
        First T1
        Second T2
    }
    
  • Yansıma (reflect): Tipleri ve değerleri çalışma zamanında keşfetmeye ve etkileşime girmeye olanak tanır. Karmaşık senaryolar için kullanılır, ancak diğer yaklaşımlara göre daha az performanslı ve güvenli olabilir.

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

Yöntem seçimi, belirli göreve ve gereken esneklik ve performans seviyesine bağlıdır. Modern Go'da genel algoritmalar ve veri yapıları oluşturmak için generikler tercih edilir. Arayüzler, çok biçimlilik ve davranış tanımı için temel mekanizmadır. Boş arayüz ve yansıma ise daha özel durumlar için kullanılır.