Size: a a a

2020 June 08

Н

Никита in Go-go!
V L
Использование везде указателей ухудшает читаемость кода, потому что становится непонятно меняет ли что-то в объекте по этому указателю метод, куда этот объект передается. Если бы передавалось по значению, то точно объект оставался бы не тронутым.
С другой стороны копирование по стеку туда-сюда возможно менее эффективно, чем размещение объекта в куче. А возможно и более - это зависит от каждого конкретного случая.
Я лично ратую за читаемость.
В общем да, падает читабельность. Поэтому стараюсь избегать указателей лишний раз
источник

VM

Vladislav Milenin in Go-go!
V L
Вы никак не аргументировали почему у структуры всегда должен быть указатель. Я вам привел пример из стандартной библиотеки, где time.Time является структурой и не возвращается по указателю, а имеет метод IsZero()
в time.Time очевидно, что если секунд 0 - значит пусто. В случае со структурой а) метод не реализован б) это неочевидно
и не надо передергивать, аргументы все на месте
источник

p

pragus in Go-go!
Никита
А еще как?
у вас там наверху var result. есть же zero value
источник

p

pragus in Go-go!
Никита
В общем да, падает читабельность. Поэтому стараюсь избегать указателей лишний раз
а с interface{} она не падает?
источник

Н

Никита in Go-go!
pragus
а с interface{} она не падает?
Смотря где)
источник

VL

V L in Go-go!
Vladislav Milenin
в time.Time очевидно, что если секунд 0 - значит пусто. В случае со структурой а) метод не реализован б) это неочевидно
и не надо передергивать, аргументы все на месте
если айдишник zero value, то очевидно, что пусто 🤷‍♂️
источник

VL

V L in Go-go!
Никита
Не знаю, разве другой вариант?

Сейчас подумал о iota. Можно ли как-то с этим. В общем, посоветуйте
источник

p

pragus in Go-go!
Никита
Смотря где)
а вы попробуйте поиспользовать потом где-то ваш interface{}
источник

VM

Vladislav Milenin in Go-go!
V L
если айдишник zero value, то очевидно, что пусто 🤷‍♂️
какие-то примеры вне контекста пошли 🤦
источник

VL

V L in Go-go!
Пока что ваш единственный аргумент был "все так делают", поэтому я не очень хочу продолжать этот разговор, но было занятно, спасибо.
источник

VM

Vladislav Milenin in Go-go!
Vladislav Milenin
Удачи дебажить решения с Exists и пустыми структурами) для джунов то еще минное поле
ага, единственный.
источник

p

pragus in Go-go!
V L
Пока что ваш единственный аргумент был "все так делают", поэтому я не очень хочу продолжать этот разговор, но было занятно, спасибо.
жирные структуры дорого гонять не указателем. ну и насколько я помню struct => interface{} приводит к аллокации
источник

VL

V L in Go-go!
Vladislav Milenin
ага, единственный.
Тут я вам оппонировал: ничем не отличается от IsZero для time.Time
источник

VM

Vladislav Milenin in Go-go!
V L
Тут я вам оппонировал: ничем не отличается от IsZero для time.Time
только кейсы ничем не схожи, а так пожалуй да, стоит закончить с таким оппонированием)
источник

VL

V L in Go-go!
pragus
жирные структуры дорого гонять не указателем. ну и насколько я помню struct => interface{} приводит к аллокации
Аллокация зависит от результатов escape analysis. В частности при передаче и возвращения указателей для типа в функции и обратно увеличивается score и повышается вероятность размещения на куче, вместо стека.
источник

VL

V L in Go-go!
А вот где лучше хранить структуру - в куче или стеке - это очень сложный вопрос, индивидуальный для каждого случая.
источник

VL

V L in Go-go!
Если вы переживаете за размер аргументов, то я бы рекомендовал использовать go-critic и довериться ему, Искандер знает свое дело.
источник

p

pragus in Go-go!
V L
Аллокация зависит от результатов escape analysis. В частности при передаче и возвращения указателей для типа в функции и обратно увеличивается score и повышается вероятность размещения на куче, вместо стека.
я про конверсию структуры в interface{}
источник

VL

V L in Go-go!
pragus
я про конверсию структуры в interface{}
Тут вы правы, но у вас вроде получается объяснить Никите, что в этом случае у него это лишнее 🙂
источник

p

pragus in Go-go!
V L
Тут вы правы, но у вас вроде получается объяснить Никите, что в этом случае у него это лишнее 🙂
источник