RSS Джулия Эванс
Подписаться
Структуры Go копируются при присваивании (и другие вещи о Go, которые я пропустил)
Автор, случайный программист на Go, столкнулся с ошибкой, которая выявила фундаментальное недопонимание того, как структуры копируются при присваивании в Go. Это недопонимание возникло из-за того, что структуры копируются при присваивании, а не передаются по ссылке, что привело к неожиданному поведению при изменении структуры после ее присваивания другой переменной. Автор был удивлен этим поведением, поскольку его опыт работы с другими языками привел к убеждению, что переменные передаются по ссылке. Это заблуждение было еще больше усложнено автором пониманием передачи по значению и передачи по ссылке в аргументах функций, которое он не распространил на присваивание переменным. Кроме того, автор узнал, что под-slice в Go разделяют одну и ту же основную массивную строку с оригинальным slice, что означает, что добавление к под-slice может непреднамеренно изменять оригинал. Кроме того, автор получил ясность в разнице между приемниками значения и указателями в методах Go, поняв, что приемники указателей необходимы, когда метод должен изменять структуру, на которой он вызван. Автор похвалил ресурс "100 ошибок Go" за его ясный и лаконичный формат, который позволил ему быстро найти и узнать из общих ловушек Go. Наконец, автор перечислил другие ценные ресурсы Go, включая "Go по примерам", "go.dev/play" и статические инструменты анализа, такие как "staticcheck" и "golangci-lint."