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


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

View MORE
Open in Telegram


Telegram News

Date: |

5Telegram Channel avatar size/dimensions A Telegram channel is used for various purposes, from sharing helpful content to implementing a business strategy. In addition, you can use your channel to build and improve your company image, boost your sales, make profits, enhance customer loyalty, and more. As of Thursday, the SUCK Channel had 34,146 subscribers, with only one message dated August 28, 2020. It was an announcement stating that police had removed all posts on the channel because its content “contravenes the laws of Hong Kong.” bank east asia october 20 kowloon It’s yet another bloodbath on Satoshi Street. As of press time, Bitcoin (BTC) and the broader cryptocurrency market have corrected another 10 percent amid a massive sell-off. Ethereum (EHT) is down a staggering 15 percent moving close to $1,000, down more than 42 percent on the weekly chart.
from us


Telegram commit history
FROM American