Sobes.tech
Middle+

Чӣ гуна навиштани коди умумӣ дар Go вуҷуд дорад?

sobes.tech AI

Ҷавоб аз AI

Дар Go пешниҳод шудаанд роҳҳои асосии навиштани коди умумӣ:

  • Интерфейсҳо: Имкон медиҳанд, ки функсияҳоро нависед, ки бо ҳар гуна намудҳо кор мекунанд, ки ба маҷмӯи муайяншудаи методҳо ҷавобгӯ мебошанд.

    // Тартиби интерфейси Reader
    type Reader interface {
        Read(p []byte) (n int, err error)
    }
    
    // Функсия, ки бо ҳар гуна намуд, ки Reader-ро иҷро мекунад, кор мекунад
    func ProcessData(r Reader) error {
        // хондани маълумот аз Reader
        return nil
    }
    
  • Интерфейси холӣ (interface{}): Навъи умумӣ, ки метавонад ҳар гуна арзишро ифода кунад. Пеш аз истифода бояд навъи онро табдил дод.

    func PrintAnything(v interface{}) {
        // Табдил додан бо санҷиш
        if s, ok := v.(string); ok {
            fmt.Println("Ин сатр:", s)
        } else if i, ok := v.(int); ok {
            fmt.Println("Ин адади пурра:", i)
        }
    }
    
  • Дженерикҳо (Generics) / Намудҳои параметрӣ (type parameters): Имкон медиҳанд, ки функсияҳо ва намудҳоро нависед, ки бо маҷмӯи намудҳои ихтиёрӣ кор мекунанд, ки дар вақти эълон муайян карда мешаванд. Аз Go 1.18 илова шудаанд.

    // Функсия, ки бо ломтҳои ҳар гуна намуд T кор мекунад
    func PrintSlice[T any](s []T) {
        for _, v := range s {
            fmt.Println(v)
        }
    }
    
    // Намуди умумии Pair бо параметрҳои T1 ва T2
    type Pair[T1, T2 any] struct {
        First T1
        Second T2
    }
    
  • Рефлексия (reflect): Имкон медиҳад, ки бо намудҳо ва арзишҳо дар вақти иҷрои барномаро таҳқиқ ва муошират кунед. Аксар вақт барои сценарийҳои мураккаб истифода мешавад, аммо метавонад камтар самаранок ва бехатар бошад, нисбат ба дигар роҳҳо.

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

Интихоби роҳ аз вазифаи мушаххас ва сатҳи талаботи чандирӣ ва самаранокӣ вобаста аст. Дженерикҳо роҳи беҳтарин барои эҷоди алгоритмҳои умумӣ ва структураҳои додаҳо дар Go-и муосир мебошанд. Интерфейсҳо ҳанӯз механизмҳои асосӣ барои полиморфизм ва муайян кардани рафтор мебошанд. Интерфейсҳои холӣ ва рефлексия бештар барои ҳолатҳои махсус истифода мешаванд.