Комментарии 7
А вот синтаксис, при котором для обращения к полям и методам всегда используется точка (и для объектов и для указателей) — крайне интересен. Я не могу сказать однозначно, хорошо это или плохо, но это тот вопрос который требует всестороннего изучения:)
Строки это ж не совсем простой тип, это как struct (вернее это рид онли слайс, который ведет уже к struct).
Плюс хорошо бы указать, что все в го передается как значение. Т.е. даже указатель тоже передается как значение (т.е. копия адреса).
В общем, новичкам можно об эту статью споткнуться )
Один вопоос: где грань между большая и небольшая структура. Не помню сам вывел или где-то прочитал, но структуры всегда передаю по указателю, если тупо не забыл поставить звёздочку по пхп/джс привычке, что объекты передаются по ссылке.
Ещё одно из правил, как определять значение/указатель в приёмщике типа в методах (хотя скорее это расширение тезиса про сущность, которая в программе должна присутствовать в единственном экземпляре - как с User из статьи): если в поле структуры содержится тип-мьютекс (например, sync.Mutex
), блокирующий структуру, то приёмщик всегда должен быть в форме указателя, иначе эта блокировка просто не будет работать.
методы Get()
и Store()
должны быть определены для указателя на Counters
, а не на Counters
(тоесть не func (c Counters) Load(key string) int { ... }
, потому что в таком случае значение ресивера (c
) копируется, вместе с чем скопируется и мьютекс в нашей структуре, что лишает всю затею смысла и приводит к проблемам.
Отсюда https://habr.com/ru/articles/338718/
Pointer и Value семантика в определении получателя метода