C0MMIT Telegram 45
Как быстро и почти безболезненно вкатиться на Go вдобавок к питону

Если бы встретил такой пост год назад – сэкономил бы N часов дебаггинга граблей, которые сам же и раскидал. Сейчас, Time screen говорит, что за неделю на go пишу столько же времени, сколько и на питоне (не ноль, если что).

На го писал код для таких задач:
+ фичи в монолитный бэк с основной логикой (на go получается быстрый и легкий веб сервер), 
+ в отдельный сервис для процессинга признаков и статистик 
+ блендер, которые собирает рекомендации генераторов, комбинирует их в финале и делает пост-ранкинг.

Как начал писать код на го. 

1. Пошел в документацию и прошел короткий go dev tour. Там на примерах познакомился с базовым синтаксисом. 

2. Начал писать несложный код и посматривал в примеры вот тут  и в документацию, когда писал код. Например, в gorm, который отвечает за работу с базой. 

3. Пролистал effective go, но там часть инфы давно не обновлялась. 

4. Здорово помогал copilot, который позволял не запоминая весь синтаксис, писать код целыми блоками. 

Если бы вкатывался сейчас, то прошел бы этот курс Microsoft

🐞Возможные ошибки при переходе с питона.

Когда после питона начнете писать на го, есть соблазн ожидать похожего поведения, когда это не так.

Вот, 3 примера кода, которые на питоне и го выглядят одинаково, но ведут себя по разному. Взял примеры с array (списки на питоне) и map (словари), так как чаще всего используются эти структуры данных.

Написал примеры кода на го в playground, а в комментариях указал, что бы получилось в питоне. Поэтому советую открыть ссылку с кодом в соседней вкладке и смотреть с комментариями отсюда.

1. Слайсы в питоне – это копия участка исходного списка. Поэтому изменяя его, на исходный список вы не влияете. На го же, слайс – это участок исходного списка, поэтому если хотите получить его копию, нужно копировать явным образом. 

2. В го по умолчанию переменные передаются в метод “pass by value” (в функцию передается копия значения переменной), а в питоне “pass by referenece” (передается указатель на участок памяти со значением). Это значит, что в питоне вы будете менять список, который передали в функцию, а на го будете работать с копией. Однако, на го тоже можно сделать  “pass by referenece”, передав адрес переменной. Посмотрите в код, там понятнее.  

3. Переменные в го инициализируются нулевыми значениями. А если вы попробуете получить элемент, которого нет, из мапы – получите нулевое значение этого типа (считайте, что map на го – это defaultdict из питона). Поэтому map в го возвращает еще boolean значение есть ли такой ключ в словаре. Вот хорошая статья о том, как устроен hashmap на го. 

Еще немного ссылок.
+ Большой список ссылок по го на реддите.
+ Слак по Go на 100к людей, где даже могут отревьюить код. Называется, кстати, gophers - почти как llm от deepmind.

P.S. Поделитесь пожалуйста лекциями или статьями по устройству питона и го? Про устройство GC, GIL, scheduler в языках. И про разные штуки типа convoy effect. Тут, кстати, хорошо расписано про GIL и convoy effect на питоне.



tgoop.com/c0mmit/45
Create:
Last Update:

Как быстро и почти безболезненно вкатиться на Go вдобавок к питону

Если бы встретил такой пост год назад – сэкономил бы N часов дебаггинга граблей, которые сам же и раскидал. Сейчас, Time screen говорит, что за неделю на go пишу столько же времени, сколько и на питоне (не ноль, если что).

На го писал код для таких задач:
+ фичи в монолитный бэк с основной логикой (на go получается быстрый и легкий веб сервер), 
+ в отдельный сервис для процессинга признаков и статистик 
+ блендер, которые собирает рекомендации генераторов, комбинирует их в финале и делает пост-ранкинг.

Как начал писать код на го. 

1. Пошел в документацию и прошел короткий go dev tour. Там на примерах познакомился с базовым синтаксисом. 

2. Начал писать несложный код и посматривал в примеры вот тут  и в документацию, когда писал код. Например, в gorm, который отвечает за работу с базой. 

3. Пролистал effective go, но там часть инфы давно не обновлялась. 

4. Здорово помогал copilot, который позволял не запоминая весь синтаксис, писать код целыми блоками. 

Если бы вкатывался сейчас, то прошел бы этот курс Microsoft

🐞Возможные ошибки при переходе с питона.

Когда после питона начнете писать на го, есть соблазн ожидать похожего поведения, когда это не так.

Вот, 3 примера кода, которые на питоне и го выглядят одинаково, но ведут себя по разному. Взял примеры с array (списки на питоне) и map (словари), так как чаще всего используются эти структуры данных.

Написал примеры кода на го в playground, а в комментариях указал, что бы получилось в питоне. Поэтому советую открыть ссылку с кодом в соседней вкладке и смотреть с комментариями отсюда.

1. Слайсы в питоне – это копия участка исходного списка. Поэтому изменяя его, на исходный список вы не влияете. На го же, слайс – это участок исходного списка, поэтому если хотите получить его копию, нужно копировать явным образом. 

2. В го по умолчанию переменные передаются в метод “pass by value” (в функцию передается копия значения переменной), а в питоне “pass by referenece” (передается указатель на участок памяти со значением). Это значит, что в питоне вы будете менять список, который передали в функцию, а на го будете работать с копией. Однако, на го тоже можно сделать  “pass by referenece”, передав адрес переменной. Посмотрите в код, там понятнее.  

3. Переменные в го инициализируются нулевыми значениями. А если вы попробуете получить элемент, которого нет, из мапы – получите нулевое значение этого типа (считайте, что map на го – это defaultdict из питона). Поэтому map в го возвращает еще boolean значение есть ли такой ключ в словаре. Вот хорошая статья о том, как устроен hashmap на го. 

Еще немного ссылок.
+ Большой список ссылок по го на реддите.
+ Слак по Go на 100к людей, где даже могут отревьюить код. Называется, кстати, gophers - почти как llm от deepmind.

P.S. Поделитесь пожалуйста лекциями или статьями по устройству питона и го? Про устройство GC, GIL, scheduler в языках. И про разные штуки типа convoy effect. Тут, кстати, хорошо расписано про GIL и convoy effect на питоне.

BY commit history

❌Photos not found?❌Click here to update cache.


Share with your friend now:
tgoop.com/c0mmit/45

View MORE
Open in Telegram


Telegram News

Date: |

The Channel name and bio must be no more than 255 characters long Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019. Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. To delete a channel with over 1,000 subscribers, you need to contact user support Find your optimal posting schedule and stick to it. The peak posting times include 8 am, 6 pm, and 8 pm on social media. Try to publish serious stuff in the morning and leave less demanding content later in the day.
from us


Telegram commit history
FROM American