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:
                // աշխատանք
            }
        }
    }()
}