Size: a a a

2020 June 08

VL

V L in Go-go!
Vladislav Milenin
Удачи дебажить решения с Exists и пустыми структурами) для джунов то еще минное поле
А если бы там возвращалось time.Time, а не структура,  вы бы тоже указатель сделали?
источник

p

pragus in Go-go!
Никита
@antonikucherov @cauchy2384

Попытался применить то, что вы говорили. Набросал пример: https://gist.github.com/floyernick/b4d8655ced466f52e97d568e73a20d2d

Ну и для удобства сбросил все в один файл. И так делать для каждого юзкейса. Будет интересен ваш фидбек.
+ зачем вы каждый раз аллоцируете под errors.InternalError{} и errors.NoteNotFound{}?
источник

VM

Vladislav Milenin in Go-go!
V L
А если бы там возвращалось time.Time, а не структура,  вы бы тоже указатель сделали?
Я бы в обоих случаях возвращал {значение, ошибка}
Только в случае со структурами должен быть указатель
источник

VM

Vladislav Milenin in Go-go!
Как, собственно, повсеместно и делают
источник

VL

V L in Go-go!
Ну вот time.Time - это структура. Вы бы возвращали указатель на нее?
источник

VM

Vladislav Milenin in Go-go!
V L
Ну вот time.Time - это структура. Вы бы возвращали указатель на нее?
Сложно представить такой кейс
источник

VL

V L in Go-go!
А если бы int был, вы бы возвращали указатель?
источник

VM

Vladislav Milenin in Go-go!
Vladislav Milenin
Я бы в обоих случаях возвращал {значение, ошибка}
Только в случае со структурами должен быть указатель
Я вам ответил про это :)
источник

VM

Vladislav Milenin in Go-go!
Разговор уже ни о чем. Все сказано
источник

VL

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

p

pragus in Go-go!
Никита
@antonikucherov @cauchy2384

Попытался применить то, что вы говорили. Набросал пример: https://gist.github.com/floyernick/b4d8655ced466f52e97d568e73a20d2d

Ну и для удобства сбросил все в один файл. И так делать для каждого юзкейса. Будет интересен ваш фидбек.
и какой смысл в result = NotesUpdateResponse{} ?
источник

h

helsingf♂rce in Go-go!
к слову о вашем споре: есть какая-нибудь литература по теме указателей, когда стоит применять, когда нет?
источник

h

helsingf♂rce in Go-go!
чтобы однозначно сказать
источник

VL

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

p

pragus in Go-go!
helsingf♂rce
к слову о вашем споре: есть какая-нибудь литература по теме указателей, когда стоит применять, когда нет?
type Cache struct {
sync.Mutex
Entries map[string]Entry
}

ну и дальше Get/Set без поинтеров никак
источник

Н

Никита in Go-go!
pragus
+ зачем вы каждый раз аллоцируете под errors.InternalError{} и errors.NoteNotFound{}?
Не знаю, разве другой вариант?

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

VL

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

Н

Никита in Go-go!
pragus
и какой смысл в result = NotesUpdateResponse{} ?
Для наглядности. Предлагаете сразу возвращать без переменной?
источник

p

pragus in Go-go!
Никита
Для наглядности. Предлагаете сразу возвращать без переменной?
как минимум
источник

Н

Никита in Go-go!
pragus
как минимум
А еще как?
источник