Size: a a a

2020 December 11

DN

Denis Nest in Go-go!
ip.IP = net.ParseIP(arg)
if ip.IP == nil {
 return fmt.Errorf("%s : invalig ip address")
}
_, err := os.Stat(arg)
if os.IsNotExist(err) {
 return fmt.Errorf("%s : file is not exist")
}
// полезные ништяки
return nil
источник

DN

Denis Nest in Go-go!
Calculon🤖
неопределенность, нельзя будет нормальную ошибку отдать т.к. все что не IP прога будет интерпретировать как путь
Функция парсинга файла ошибку отдавать должна, а не парсинга аргумента
источник

C

Calculon🤖 in Go-go!
Denis Nest
Функция парсинга файла ошибку отдавать должна, а не парсинга аргумента
тебе виднее
источник

DN

Denis Nest in Go-go!
Я понимаю, что можно проще, но пытаюсь понять незнакомые мне механизмы.
источник

p

pragus in Go-go!
Calculon🤖
мне больно на это смотреть
Больно - это если налепить фабрик )
источник

DN

Denis Nest in Go-go!
Denis Nest
type ArgIP struct {
IP net.IP
}
type ArgConfig struct {
Path string
}

type Arger interface {
ParseArg(arg string) error
}

func (ip ArgIP) ParseArg(arg string) error {
// работаю с конкретным ip
return nil
}
func (config ArgConfig) ParseArg(arg string) error {
       // работаю о списком ip
return nil
}

верно?
@pragus правильно мыслю?
источник

VS

Vyacheslav Sitnikov in Go-go!
Народ, подскажите неразумному, каким образом я получаю ошибку:
fatal error: sync: RUnlock of unlocked RWMutex
В данном коде:
func (p *Project) DatabaseIsInvalid(name string) bool {
 result := false
 p.update.RLock()
 if checkDb, ok := p.InvalidDatabases[name]; ok && !checkDb {
   result = true
 }
 p.update.RUnlock()
 return result
}

Для этой структуры есть ещё одна функция, использующая Lock:
func (p *Project) DatabaseSetState(name string, state bool) {
 p.update.Lock()
 p.InvalidDatabases[name] = state
 p.update.Unlock()
}

И это всё. InvalidDatabases имеет формат map[string]bool, если это имеет значение
Как, блин, такое вообще возможно?
источник

АД

Алексей Долгов... in Go-go!
Vyacheslav Sitnikov
Народ, подскажите неразумному, каким образом я получаю ошибку:
fatal error: sync: RUnlock of unlocked RWMutex
В данном коде:
func (p *Project) DatabaseIsInvalid(name string) bool {
 result := false
 p.update.RLock()
 if checkDb, ok := p.InvalidDatabases[name]; ok && !checkDb {
   result = true
 }
 p.update.RUnlock()
 return result
}

Для этой структуры есть ещё одна функция, использующая Lock:
func (p *Project) DatabaseSetState(name string, state bool) {
 p.update.Lock()
 p.InvalidDatabases[name] = state
 p.update.Unlock()
}

И это всё. InvalidDatabases имеет формат map[string]bool, если это имеет значение
Как, блин, такое вообще возможно?
ошибка всегда? или то бывает, то нет?
источник

00

0JLQuCDQotGP0L0= 0x3... in Go-go!
pragus
Больно - это если налепить фабрик )
Вспоминаю физзбазз энтерпрайз эдишон
источник

VS

Vyacheslav Sitnikov in Go-go!
Алексей Долгов
ошибка всегда? или то бывает, то нет?
То бывает, то нет. Там несколько горутин
источник

АД

Алексей Долгов... in Go-go!
ну fatal здесь бросается. https://github.com/golang/go/blob/master/src/sync/rwmutex.go#L93 вопрос почему. а в трейсе что? не разобрать?
источник

Z

Zver in Go-go!
Vyacheslav Sitnikov
Народ, подскажите неразумному, каким образом я получаю ошибку:
fatal error: sync: RUnlock of unlocked RWMutex
В данном коде:
func (p *Project) DatabaseIsInvalid(name string) bool {
 result := false
 p.update.RLock()
 if checkDb, ok := p.InvalidDatabases[name]; ok && !checkDb {
   result = true
 }
 p.update.RUnlock()
 return result
}

Для этой структуры есть ещё одна функция, использующая Lock:
func (p *Project) DatabaseSetState(name string, state bool) {
 p.update.Lock()
 p.InvalidDatabases[name] = state
 p.update.Unlock()
}

И это всё. InvalidDatabases имеет формат map[string]bool, если это имеет значение
Как, блин, такое вообще возможно?
А больше точно нет обращения к RUnlock? И мютекс не перезаписывается нигде?
источник

VS

Vyacheslav Sitnikov in Go-go!
обращений точно нет, мютекс явно не копируется
источник

VS

Vyacheslav Sitnikov in Go-go!
но эти проекты лежат в мапе map[string]Project и перебираются через range, может при этом происходить неявное копирование мютекса?
источник

Z

Zver in Go-go!
Vyacheslav Sitnikov
обращений точно нет, мютекс явно не копируется
Не перезаписывается. Найдите все использования  update.
источник

Z

Zver in Go-go!
Создается копия Project.
источник

G

German in Go-go!
Vyacheslav Sitnikov
но эти проекты лежат в мапе map[string]Project и перебираются через range, может при этом происходить неявное копирование мютекса?
range копирует объекты
источник

Z

Zver in Go-go!
Именно так map[string]Project? Не map[string]*Project?
источник

VS

Vyacheslav Sitnikov in Go-go!
Zver
Не перезаписывается. Найдите все использования  update.
Две функции всего, одна пишет, вторая читает. Текст обоих привёл. Извне, по понятным причинам, блокировка происходить не может
источник

Z

Zver in Go-go!
Сделайте map[string]*Project
источник