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.