Сходил вчера на собеседование, и на нём мне напомнили про сюрпризы, которые могут поджидать разработчика при работе с интерфейсами. Один из таких сюрпризов может проявиться, если к переменной с типом-интерфейсом не синхронизирован конкурентный доступ.
TLDR: когда вы не обеспечиваете синхронный доступ к переменной с интерфейсным типом, не удивляйтесь, если обнаружите, что тип данных внутри указан один, а значение совсем другого типа. Это связано с тем, что Go обеспечивает атомарное обновление только переменных с типами из одного машинного слова. Интерфейсы к ним не относятся.
https://dave.cheney.net/2014/06/27/ice-cream-makers-and-data-races
Post #17
346
- 👍 1