Указатели как поля в структуре.
Наткнулся на код, в котором для полей используются ссылочные типы, например,
Какой-то явной необходимости в этом нет, всё было работало и без этого.
Уточнил, оказалось, что это такая конвенция, потому что поинтер можно проверить
А для каждого другого типа нужно сравнивать с нулевым значением.
Плюс к этому всему в коде куча конструкций вроде:
Лучше уж написать ф-цию, которая возвращает поинтер на конкретный тип.
Ну, я решил немного изучить вопрос и наткнулся на вот этот тред.
Если коротко:
Есть смысл использовать *T как поле в случае маршалинга, когда нужно передавать нулевое значение не смотря на omitempty. Например, поле int и нам нужно передавать 0, в случае с указателем, значение в json смаршалится как 0.
В случае с nil - поля не будет в json'e.
Таким образом, можно разделять случаи когда поле не было передано и когда поле имеет нулевое значение.
Но мне кажется, что это нужно настолько редко :)
Интересно было бы начать здесь тред по этому вопросу и услышать ваше мнение.
Наткнулся на код, в котором для полей используются ссылочные типы, например,
*bool, *string и т.дКакой-то явной необходимости в этом нет, всё было работало и без этого.
Уточнил, оказалось, что это такая конвенция, потому что поинтер можно проверить
v != nil и т.дА для каждого другого типа нужно сравнивать с нулевым значением.
Плюс к этому всему в коде куча конструкций вроде:
isTrue := trueОни мне не кажутся красивыми.
a.someFlag = &isTrue
Лучше уж написать ф-цию, которая возвращает поинтер на конкретный тип.
Ну, я решил немного изучить вопрос и наткнулся на вот этот тред.
Если коротко:
Есть смысл использовать *T как поле в случае маршалинга, когда нужно передавать нулевое значение не смотря на omitempty. Например, поле int и нам нужно передавать 0, в случае с указателем, значение в json смаршалится как 0.
В случае с nil - поля не будет в json'e.
Таким образом, можно разделять случаи когда поле не было передано и когда поле имеет нулевое значение.
Но мне кажется, что это нужно настолько редко :)
Интересно было бы начать здесь тред по этому вопросу и услышать ваше мнение.
Stack Overflow
Difference using pointer in struct fields
We can create structs in golang this way. Examples below:
What are differences between these two?
// Usual way
type Employee struct {
firstName string `json:"name"`
salary int ...
What are differences between these two?
// Usual way
type Employee struct {
firstName string `json:"name"`
salary int ...
Нашел интересную дырку в монге.
Ну, скорее всего это предсказуемое поведение, но неочевидное.
Если пытаешься конкурентно апдейтнуть один и тот же документ с
Происходит так из-за того, что операции в монге атомарны в пределах одного документа.
А если документа нет - то нет и атомарности :)
Ну, скорее всего это предсказуемое поведение, но неочевидное.
Если пытаешься конкурентно апдейтнуть один и тот же документ с
upsert:true (в случае если документа не существует) - создаётся два документа. Происходит так из-за того, что операции в монге атомарны в пределах одного документа.
А если документа нет - то нет и атомарности :)
Предыдущее актуально для старых версий монги.
Начиная с версии 4.16 - это поведение исправили.
Начиная с версии 4.16 - это поведение исправили.
Clubhouse (таск менеджер) меняет название на Shortcut.
Наконец на меня перестанут смотреть испуганным взглядом, когда я говорю, что мы трекаем таски в клабхаусе 😂
https://clubhouse.io/blog/clubhouse-changing-our-name-to-shortcut
Наконец на меня перестанут смотреть испуганным взглядом, когда я говорю, что мы трекаем таски в клабхаусе 😂
https://clubhouse.io/blog/clubhouse-changing-our-name-to-shortcut
Shortcut
Clubhouse's name is now Shortcut
They say there are no shortcuts in life, and they were mostly right about that. Until now. Goodbye Clubhouse. Hello Shortcut.
Forwarded from Семантика безвременья
С переходом на удалёнку я понял, насколько важно правильно обустроенное рабочее место.
Первым делом купил нормальное кресло для работы. Работать стало удобнее, но болела шея из-за того, что постоянно смотрел вниз на ноут. В итоге купил вчера монитор и наконец стало правда комфортно.
В планах купить еще отдельную клавиатуру. Смотрю на что-то вроде этой и отдельный тачпад, поставить его между частями клавиатуры (должно быть удобно).
Делитесь своим сетапом в комментах, интересно посмотреть.
Первым делом купил нормальное кресло для работы. Работать стало удобнее, но болела шея из-за того, что постоянно смотрел вниз на ноут. В итоге купил вчера монитор и наконец стало правда комфортно.
В планах купить еще отдельную клавиатуру. Смотрю на что-то вроде этой и отдельный тачпад, поставить его между частями клавиатуры (должно быть удобно).
Делитесь своим сетапом в комментах, интересно посмотреть.
Не очень подходит под тематику канала. Но, очень интересная статья на тему онлайн рекламы и того, почему эта ниша - новый пузырь доткомов.
Очень длинная, но правда крутая и местами забавная(из-за старых фейлов огромных корпораций с рекламой)
https://thecorrespondent.com/100/the-new-dot-com-bubble-is-here-its-called-online-advertising
Очень длинная, но правда крутая и местами забавная(из-за старых фейлов огромных корпораций с рекламой)
https://thecorrespondent.com/100/the-new-dot-com-bubble-is-here-its-called-online-advertising
The Correspondent
The new dot com bubble is here: it’s called online advertising
In 2018 $273bn was spent on digital ads globally. We delve into the world of clicks, banners and keywords to find out if any of it is real. What do we really know about the effectiveness of digital advertising?
Forwarded from LEFT JOIN
Совершенно кайфовый ресурс — визуальное введение в машинное обучение. К сожалению, по-русски у меня почему-то выдает ошибку 500. Но очень красиво и понятно сделано 😍
www.r2d3.us
A visual introduction to machine learning
What is machine learning? See how it works with our animated data visualization.
Не ново, но очень интересно
https://eli.thegreenplace.net/2021/rewriting-go-source-code-with-ast-tooling/
https://eli.thegreenplace.net/2021/rewriting-go-source-code-with-ast-tooling/