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:
                // სამუშაო
            }
        }
    }()
}