_Этот пост является версией моей же англоязычной статьи ["How to avoid gotchas in Go"][1], но слово gotcha не переводится на русский, поэтому я буду использовать это слово как без перевода, так и немного непрямой вариант — "наступать на грабли"._
> Gotcha — корректная конструкция системы, программы или языка программирования, которая работает, как описано, но, при этом, контринтуитивна и является причиной ошибок, поскольку её легко использовать неверно.
В языке Go есть несколько таких gotchas и есть немало хороших статей, которые их [подробно][2] [описывают][3] и [разъясняют][4]. Я считаю, что эти статьи очень важны, особенно для новичков в Go, поскольку регулярно вижу людей, попадающихся на те же грабли.
Но один вопрос меня мучал долгое время — почему я сам никогда не делал этих ошибок? Серьезно, самые популярные из них, вроде путаницы с nil-интерфейсом или непонятного результата при append()-е слайса — в моей практике никогда не были проблемой. Каким-то образом мне повезло обойти эти подводные камни с первых дней своей работы с Go. Что же мне помогло?
И ответ оказался довольно прост. Я просто очень вовремя прочёл несколько хороших статей о внутреннем устройстве структур данных в Go и прочих деталях реализации. И этого, вполне поверхностного на самом деле, знания было достаточно, чтобы выработать некоторую интуицию и избегать этих подводных камней.
[Читать дальше →][5]
[1]:
https://divan.github.io/posts/avoid_gotchas/
[2]:
https://go-traps.appspot.com/
[3]:
http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html
[4]:
https://medium.com/@Jarema./golang-slice-append-gotcha-e9020ff37374#.xvfl7r4ti
[5]:
https://habrahabr.ru/post/325468/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut