Go tilida umumiy kod yozishning qanday usullari mavjud?
sobes.tech AI
AIdan javob
Go tilida umumiy kod yozishning quyidagi asosiy usullari mavjud:
-
Interfeyslar: Ma'lum bir metodlar to'plamini qondiradigan har qanday tur bilan ishlaydigan funksiyalar yozishga imkon beradi.
// Reader interfeysining ta'rifi type Reader interface { Read(p []byte) (n int, err error) } // Readerni amalga oshiradigan har qanday tur bilan ishlaydigan funksiya func ProcessData(r Reader) error { // Reader'dan ma'lumotlarni o'qish return nil } -
Bo'sh interfeys (
interface{}): Har qanday qiymatni ifodalovchi universal tur. Foydalanishdan oldin turga o'tkazish talab qilinadi.func PrintAnything(v interface{}) { // Turni tekshirish bilan o'tkazish if s, ok := v.(string); ok { fmt.Println("Bu satr:", s) } else if i, ok := v.(int); ok { fmt.Println("Bu butun son:", i) } } -
Generics / Parametrli turlar (type parameters): Deklaratsiya vaqtida belgilangan tur to'plamlari bilan ishlaydigan funksiyalar va turlar yozishga imkon beradi. Go 1.18 da qo'shilgan.
// Har qanday T turidagi slice bilan ishlaydigan funksiya func PrintSlice[T any](s []T) { for _, v := range s { fmt.Println(v) } } // T1 va T2 parametrlariga ega umumiy Pair turi type Pair[T1, T2 any] struct { First T1 Second T2 } -
Refleksiya (
reflect): Turlar va qiymatlarni ish vaqtida o'rganish va ular bilan muloqot qilish imkonini beradi. Ko'pincha murakkab holatlar uchun ishlatiladi, ammo boshqa yondashuvlarga qaraganda kamroq samarali va xavfsiz bo'lishi mumkin.import "reflect" func GetTypeName(v interface{}) string { return reflect.TypeOf(v).Name() }
Usul tanlovi aniq vazifa va talab qilinadigan moslashuvchanlik va ishlash darajasiga bog'liq. Zamonaviy Go'da umumiy algoritmlar va ma'lumot tuzilmalarini yaratish uchun generiklar afzal ko'riladi. Interfeyslar polimorfizm va xulq-atvorni belgilash uchun asosiy mexanizmdir. Bo'sh interfeys va refleksiya kamroq ishlatiladi, ko'proq maxsus holatlar uchun.