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 всё равно унесёт программу:)
}
Порекламируйте нам C#. Вот буквально сегодня утром смотрел доклад евангелиста из Microsoft про машинное обучение в F#, было интересно, по внешнему виду очень "скриптовый" язык и идеально ложится на то что бы "посчитать что-то прямо сейчас", особенно если есть класстер. Но вот как эти портянки тестировать - не совсем понятно. В отличии от этого в Golang тесты пишутся просто элементарно и не писать их уже нет никаких причин.