Sobes.tech
Middle — Senior

Архитектуралык чечимдердин ката же натыйжасыз болгон мисалдарын келтире аласызбы жана эмне үчүн экенин түшүндүрө аласызбы?

sobes.tech AI

AIден жооп

Go'да ката же натыйжалуу эмес архитектуралык чечимдер көбүнчө тилдин принциптерин жана үлгүлөрдү туура эмес колдонуу менен байланыштуу:

  • Өтө чоң монолиттик структура. Бардык код бир пакетке же файлга топтолгон болсо, бул тейлөө жана тестирлөөнү кыйындатат.
  • Абстракциялар үчүн интерфейстердин жоктугу. Go'до интерфейстер оңой эле ишке ашырууларды алмаштырууга мүмкүндүк берет, бирок колдонулбаса, код катуу болот.
  • Статус үчүн глобалдык өзгөрмөлөрдү колдонуу. Бул атаандаштык жана тесттер менен көйгөйлөрдү жаратат.
  • Горутинадарды туура эмес башкаруу. Мисалы, горутиндарды алардын аяктоо көзөмөлү жок же контекстсиз иштетүү, бул ресурстардын агып кетишине алып келет.
  • Жөнөкөй функциялар жетиштүү болсо да, каналдардын ашыкча колдонулушу. Каналдар синхрондоштуруу үчүн жакшы, бирок алардын туура эмес колдонулушу кодду татаалдатат.

Жаман мисал — контекст жана көзөмөлсүз горутин иштетүү:

func process() {
    go func() {
        // чексиз цикл, токтотуу мүмкүнчүлүгү жок
        for {
            // иштөө
        }
    }()
}

Жакшыраак — контекстти колдонуу менен токтотуу:

func process(ctx context.Context) {
    go func() {
        for {
            select {
            case <-ctx.Done():
                return
            default:
                // иштөө
            }
        }
    }()
}