Sobes.tech
Senior

func(d *Data)GetViews(kľúč int, chechDay time.Time) (int, int, err) { d.mu.Lock() defer d.mu.Unlock() infoStr, ok := d.st[kľúč] if !ok { return 0, fmt.Errorf("članok nenájdený") } return (infoStr.day, infoStr.count, nil) }

sobes.tech AI

Odpoveď od AI

V prezentovanom kóde je niekoľko chýb a nepresností:

  1. Podpis funkcie je nesprávny: hodnoty, ktoré sa vracajú, sú označené ako (int, int, err), pričom err by mal byť typu error.
  2. V return 0, fmt.Errorf("article not found") sa vracajú dve hodnoty, ale očakávajú sa tri.
  3. V return (infoStr.day, infoStr.count, nil) sú zbytočné zátvorky a infoStr.day nemusí zodpovedať typu chechDay.

Opravená verzia funkcie môže vyzerať takto:

func (d *Data) GetViews(key int, checkDay time.Time) (int, int, error) {
    d.mu.Lock()
    defer d.mu.Unlock()

    infoStr, ok := d.st[key]
    if !ok {
        return 0, 0, fmt.Errorf("článok nenájdený")
    }

    // Predpokladáme, že infoStr.day má typ time.Time
    if !infoStr.day.Equal(checkDay) {
        return 0, 0, fmt.Errorf("údaje pre zadaný deň neboli nájdené")
    }

    return infoStr.dayViews, infoStr.count, nil
}

Tu:

  • infoStr.dayViews je počet zobrazení za deň,
  • infoStr.count je celkový počet zobrazení,
  • funkcia vráti chybu, ak kľúč nie je nájdený alebo dátum nezodpovedá.

Je tiež dôležité, aby mutex mu chránil prístup k mape st, aby sa zabezpečila bezpečnosť v prostredí s viacerými vláknami.