var maxDataLock sync.Mutex
maxDataLock.Lock()
Event[name](ps)
maxDataLock.Unlock()
package events
import (
"sync"
)
var Event map[string]func(ps []string)
var maxDataLock sync.Mutex
func init() {
Event = make(map[string]func(ps []string))
maxDataLock = &sync.Mutex{}
}
// Подписка на событие
func Add(name string, callback func(ps []string)) {
maxDataLock.Lock()
Event[name] = callback
maxDataLock.Unlock()
}
// Вызов события
func Call(name string, ps []string) {
maxDataLock.Lock()
Event[name](ps)
maxDataLock.Unlock()
}
type MyType struct {
sync.RWMutex
d map[string]string
}
func (m *MyType) Add(key, value string) {
m.Lock()
defer m.Unlock()
d[key] = value
// ... любой код который может упасть, defer m.Unlock() исправит ситуацию и разблокирует, но, конечно, если не обработать defer/recover то падение в panic всё равно унесёт программу:)
}
ещё один минус вспомнил - пока не очень хорошая поддержка iOS и Android и толком нет нормальной библиотеки для крос-платформенного GUI, под переферию тоже статей мало или почти нет (например нашёл одну библиотеку которая, вроде бы, должна уметь работать с аудио-микрофоном в MacOS, но не видел больше ни одной статьи на эту тему и пока саму библиотеку не проверял)это я про Golang говорил.