Начало программирования в go
Содержание:
- Редактирование «Автозамены»
- Почему Go и Rust не соперники
- История
- Как писать Go код, который легко портируется
- Как ввести длинное тире на компьютере с операционной системой Windows
- Как мы делали мониторинг запросов mongodb
- Книга «Golang для профи: работа с сетью, многопоточность, структуры данных и машинное обучение с Go»
- Coursera
- История развития Go
- Лучшие планшеты для детей от 7 до 10 лет
- Как работает программа распознавания лиц?
- Рефакторинг программы на Go: ускорение в 23 раза
- Визуализация concurrency в Go с WebGL
- Внедрение зависимостей во время компиляции
- Заключение
- Гибридные решения
- Тестирование и корректность программ
- Заключение
- Как поставить тире на клавиатуре компьютера или ноутбука?
- Постулаты Go
- JSON с опциональными полями в Go
- Blockchain на Go. Часть 1: Прототип
- Тестирование веб-сервиса на Go
- Go, Vue и 3 дня на разработку: система реального времени для мониторинга пациентов
- Technical Details
- Инструменты для разработчика Go: знакомимся с лейблами профайлера
- Собственный поисковик по раздачам The Pirate Bay
- CourseHunter
- Раскраска графа
- Обзор функций
- Что такое Tokio и Async I/O и зачем это нужно?
- Вызов функций Go из других языков
- slit — новое слово в мире PAGERов, либо как тратить меньше времени на просмотр логов
- О плюсах и минусах Go
- Python или Go — Что быстрее для веб-разработки?
- Надёжность Go в инфраструктуре Dropbox
- Как Dropbox пришёл к использованию Go
- Настройка окружения
- Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS
- Почему вам стоит изучить Go?
- Мириады запущенных задач на C#
- Google выпустила финальную версию языка программирования Go 1
- Поговорим о Golang (Go)
- [Перевод] Почему Go не так хорош
Редактирование «Автозамены»
Почему Go и Rust не соперники
- Перевод
В этом небольшом посте я расскажу, почему я считаю, что Go и Rust не являются соперниками.
Почему некоторые считают, что Go и Rust соперники?
Rust и Go анонсировали в примерно одно и то же время. Разработку языка Go начали в 2007 и в ноябре 2009 он уже увидел свет. Rust появился несколько месяцев спустя, в 2010, тем не менее Грейдон отмечает, что разработку начали гораздо раньше. В любом случае, у обоих языков достаточно явно различаются влиятельные предшественники. В случае Go, это CSP Хоара, Alef, и Newsqueak Пайка. Rust рассматривается, как расширение семейства ML-языков.
Что Rust, что Go — оба считаются безопасными (по части управления памятью)
В то время, как это утверждение абсолютно правдиво, оба языка не поощряют использование unsafe кода; что более важно, сегодня мир просто не примет язык без подобных гарантий надежности. Просто так получилось, что Go и Rust — это первые языки, которым удалось доказать, спустя десятилетия доказательств, что в реальности программисты просто не могут безопасно обращаться с памятью вручную.
Оба очень молоды: Go достиг 1.0 в 2012, а Rust в середине 2015 года
Оба более, чем амбициозны и явно готовы потеснить «старожил».
История
Go был рождён из-за разочарования в существующих языках и рабочего окружения для системных программистов. Программирование стало слишком сложным и многообразие языков было тому частичной виной. Один делал выбор в сторону эффективной компиляции, другой — эффективное выполнение или лёгкость в написании кода. Все три аспекта в популярных языках не были доступны одновременно. Программисты, которые склонялись к простоте нежели к надёжности и производительности делали выбор в сторону динамически типизированных языков программирования таких как Python и JavaScript отвергая C++, Java.
Go является попыткой совместить простоту программирования в интерпретируемом, динамически типизированном языке с производительностью и надёжностью статически типизированного, компилируемого языка. Go также стремится быть современным, с возможностью сетевого и многоядерного вычисления. В конце концов работа с Go обязана быть быстрой: компиляция большой программы на одном компьютере должна занимать несколько секунд. Для достижения этих целей необходимо решение ряда языковых проблем: выразительный, но лёгкий тип системы; многопоточность (конкуренция) и сборщик мусора, жёсткая спецификация языка и т. д. Всё это не может быть лёгко решено только лишь с помощью библиотек и инструментов; необходим новый язык.
Как писать Go код, который легко портируется
Перевод
(Перевод статьи с советами о написании по-настоящему кросс-платформенного кода в Go)
Go великолепно приспособлен для работы с разными платформами. Моя основная среда разработки на Windows, но я всегда работаю с Linux-системами. Поэтому я естественным образом пытаюсь избегать вещей, которые могут создать проблемы.
Моё отношение к кросс-платформенной разработке таково, что если вы себя считаете серьезным разработчиком, то ваш код должен, как минимум, собираться на других платформах, потому как даже если не все функции можно использовать везде, часть пользователей всё равно захочет хотя бы часть функционала вашей библиотеки на других платформах.
Недавно я помогал делать Windows-версию очень приятной программы для бекапов, так как хотел изучить альтернативы к zpaq, очень хорошему архиватору с журналированием и фокусом на сжатие. Во время портирования я отметил несколько вещей, которые могут быть полезны другим.
Как ввести длинное тире на компьютере с операционной системой Windows
Как мы делали мониторинг запросов mongodb
Использование монги в production — достаточно спорная тема.
С одной стороны все просто и удобно: положили данные, настроили репликацию, понимаем как шардировать базу при росте объема данных. С другой стороны существует достаточно много страшилок, Aphyr в своем последнем jepsen тесте сделал не очень позитивные выводы.
По факту оказывается, что есть достаточно много проектов, где mongo является основным хранилищем данных, и нас часто спрашивали про поддержку mongodb в окметр. Мы долго тянули с этой задачей, потому что сделать «осмысленный» мониторинг на порядок сложнее, чем просто собрать какие-то метрики и настроить какие-нибудь алерты. Нужно сначала разобраться в особенностях поведения софта, чтобы понять, какие именно показатели отслеживать.
Как раз про сложности и проблемы я и хочу рассказать на примере реализации мониторинга запросов к mongodb.
Книга «Golang для профи: работа с сетью, многопоточность, структуры данных и машинное обучение с Go»
Привет, Хаброжители!
Вам уже знакомы основы языка Go? В таком случае эта книга для вас. Михалис Цукалос продемонстрирует возможности языка, даст понятные и простые объяснения, приведет примеры и предложит эффективные паттерны программирования. Изучая нюансы Go, вы освоите типы и структуры данных языка, а также работу с пакетами, конкурентность, сетевое программирование, устройство компиляторов, оптимизацию и многое другое. Закрепить новые знания помогут материалы и упражнения в конце каждой главы. Уникальным материалом станет глава о машинном обучении на языке Go, в которой вы пройдёте от основополагающих статистических приемов до регрессии и кластеризации. Вы изучите классификацию, нейронные сети и приёмы выявления аномалий. Из прикладных разделов вы узнаете: как использовать Go с Docker и Kubernetes, Git, WebAssembly, JSON и др.
Coursera
Go (golang) — современный язык программирования, предназначенный для разработки высококонкурентных приложений, работающих на многопроцессорных системах.
Курс даст основы программирования на языке Go, а так же опыт применения языка в основных задачах, которые встречаются сегодня в серверной веб-разработке.
В данной части курса будут рассмотрены основы языка и разработки веб-сервисов с использованием стандартной библиотеки.
Это курс предназначен для людей с опытом в веб-программировании. Если вы пишете на PHP/Python/Ruby/JS (Node.js) и хотите освоить Go — этот курс для вас.
Начинающим программистам может быть немного сложно, т.к. в лекциях используется профессиональных жаргон (сленг), без детальных пояснений.
Курс не рассчитан на людей без опыта программирования.
История развития Go
Язык Go элегантен и прагматичен, но некоторые его особенности имеют смысл только под определенным историческим контекстом. История Go начинается с Си. Во многих отношениях Си стал основой для создания JavaScript, Ruby, Python, C++, C# и Java. Компиляторы или интерпретаторы некоторых из этих языков даже написаны на Си. Влияние Си легко заметить во многих языках. Он был разработан Денисом Ритчи для создания ядра Unix и потом использовался для создания ядра Linux.
Язык Go был создан легендами эпохи Unix и Си. Работая Google, Роберт Грисемер, Роб Пайк и Кен Томпсон были разочарованы в Си-языках из-за их проблем. Бъярн Страуструп, создать C++ говорил так: «Си позволяет легко выстрелить себе в ногу, в C++ это сложнее, но если вы все же выстрелите, то взорвете ногу целиком».
Go наследует много хорошего от Си. Ключевые слова и сила синтаксиса, процедурный подход — это сильные стороны обоих языков. С другой стороны, ручное управление памятью и время компиляции — это проблема Си. Go решает эти проблемы с помощью сборки мусора, безопасной работы с памятью и очень быстрой компиляции.
Язык Java выбирают многие крупные компании с большими командами разработчиков. Go перенимает и этот плюс у Java и пытается быть отличным языком для больших групп разработчиков. Язык Go не имеет таких недостатков объективно ориентированного программирования, как наследование. Все реализуется с помощью лаконичного синтаксиса интерфейсов.
Также можно найти определенное сходство с динамическими языками, Go перенимает стиль написания кода у Python, настраиваемость у Ruby и простой параллелизм, вшитый в ядро языка, как у Node.js. Все начиналось, как язык, решающий некоторые проблемы Си и выросло в прекрасный язык программирования общего назначения.
Лучшие планшеты для детей от 7 до 10 лет
Как работает программа распознавания лиц?
Рефакторинг программы на Go: ускорение в 23 раза
Перевод
Привет! Меня зовут Марко, я работаю в Badoo в отделе «Платформы». У нас довольно много всего написано на Go, и зачастую это критичные к производительности системы. Именно поэтому сегодня я предлагаю вашему вниманию перевод статьи, которая мне очень понравилась и, я уверен, будет вам очень полезна. Автор пошагово показывает, как он подходил к проблемам производительности и как их решал. В том числе вы познакомитесь с богатым инструментарием, доступным в Go для такой работы. Приятного чтения!
Несколько недель назад я прочитал статью «Хороший код против плохого кода в Go», где автор шаг за шагом демонстрирует рефакторинг реального приложения, решающего реальные бизнес-задачи. Она сфокусирована на превращении «плохого кода» в «хороший код»: более идиоматичный, более понятный, полноценно использующий специфику языка Go
Но автор также заявлял о важности производительности рассматриваемого приложения. Во мне взыграло любопытство: давайте попробуем её ускорить!
Визуализация concurrency в Go с WebGL
Одной из самых сильных сторон языка программирования Go является встроенная поддержка concurrency, основанная на труде Тони Хоара «Communicating Sequential Processes». Go создан для удобной работы с многопоточным программированием и позволяет очень легко строить довольно сложные concurrent-программы. Но задумывались ли вы когда-нибудь, как выглядят различные паттерны concurrency визуально?
Конечно, задумывались. Все мы, так или иначе, мыслим визуальными образами. Если я попрошу вас о чём-то, что включает числа «от 1 до 100», вы мгновенно их «увидите» в своей голове в той или иной форме, вероятно даже не отдавая себе в этом отчёт. Я, к примеру, ряд от 1 до 100 вижу как линия с числами уходящая от меня, поворачивающая на 90 градусов вправо на числе 20 и продолжающая до 1000+. И, покопавшись в памяти, я вспоминаю, что в самом первом детском саду в раздевалке вдоль стены были написаны номерки, и число 20 было как-раз в углу. У вас же, вероятно, какое-то свое представление. Или вот, другой частый пример — представьте круглый год и 4 сезона года — кто-то их видит как квадрат, каждая грань которого принадлежит сезону, кто-то — как круг, кто-то ещё как-то.
Так или иначе, позвольте мне показать мою попытку визуализировать основные паттерны concurrency с помощью Go и WebGL. Эти интерактивные визуализации более-менее отражают то, как я вижу это в своей голове. Интересно будет услышать, насколько это отличается от визуализаций читателей.
Внедрение зависимостей во время компиляции
Термин «внедрение зависимостей» (dependency injection) получил плоху репутацию. Обычно люди сразу начинают думать про XML-файлы Spring-а. Но на самом деле, этот термин означает, что мы передаём зависимости объекту, а не объект ищет их сам.
Пакет это как раз место, где происходит выбор того, какие зависимости внедрять в какие объекты. Поскольку этот пакет обычно просто соединяет между собой различные куски приложения, обычно это довольно небольшой и простой код:
Также важно понимать, что пакет main является тоже адаптером. Он соединяет терминал с вашим доменом
Заключение
Дизайн приложения это сложная проблема. Нужно принимать массу решений и без хорошего набора принципов, проблема становится ещё хуже. Мы посмотрели на несколько подходов к структуризации Go приложений и рассмотрели их недостатки.
Я уверен, что организация кода, основанная на зависимостях, облегчает дизайн и делает код более понятным. Сначала мы определяем язык нашего домена. Затем, изолируем зависимости. Далее создаём заглушки для тестов. И в конце, склеиваем это всё вместе с помощью пакета main.
Посмотрите на такой подход в следующем вашем приложении. Если у вас есть вопросы или вы хотите обсудить дизайн приложений, я доступен в Твиттере — @benbjohnson или как benbjohnson в Slack-канале по Go.
Гибридные решения
В определенных ситуациях задача может распасться на две части: базовая формулировка задачи + дополнительные ограничения, в такой ситуации можно использовать связку:
На ряде задач, например в случае с structured frequent pattern mining гибридные решения имеют существенное преимущество в масштабируемости (см. Paramonov, Sergey; Stepanova, Daria; Miettinen, Pauli: Hybrid ASP-based Approach to Pattern Mining, Theory and Practice of Logic Programming, 2018):
Сравнение на синтетическом датасете последовательностей (от авторов другого метода; разница работы на настоящих крупных датасетах несколько порядков — у нас десятки секунды-минуты, у них не получается вычислить все последовательности за ночь вычислений)
Так же для графовых датасетов разница еще существенней, тут сравнивается старый декларативный метод и новый гибридный (логарифмическая шкала)
Отсюда следует, что если у нас есть специализированный алгоритм и дополнительные ограничения, то при определенных условиях их можно соединить для более эффективного и общего решения.
Тестирование и корректность программ
Обычно, научные задачи, особенно комбинаторные, сложно отлаживать и еще сложнее показать их корректность. Отсюда возникают подобные проблемы в духе вот таких:
И в целом, если вы думали, что научный код обычно необычайного качества, покрыт тестами и легко поддерживается, то вот кусочек кода из LCM-k:
Одной из важных особенностей программ с формальной семантикой является доказуемость их корректности, точнее говоря, вы смещаете фокус вопроса корректности на «ASP solver», т.е. систему которая может работать с языком Answer Set Programming. Вы можете показать, что программа и правила математически корректно моделируют вашу задачу — и вопросы по верному выполнению переходят в сообщество разработчиков. У систем, как правило, открытый код — так же они хорошо покрыты тестами и ими пользуются немалая группа юзеров. В среднем, мы достаточно уверены, что с ASP системами все хорошо в плане правильного выполнения кода.
Обычно, когда на свет выходит новый алгоритм (и статья вместе с ним), мы как бы просто верим в часть помеченную «?» на схеме:
В случае с ASP — algorithm и implementation являются одним и тем же (ну если вы не обернете ASP в процедурные вызовы в алгоритме), а значит можно показать формальную корректность самого кода.
Например, это можно использовать в качестве:
- прототипа решения
- baseline алгоритма
- тестирования более быстрой версии на корректность
Заключение
Сегодня мы многое поняли (с) — и прикоснулись к вершине айсберга логического программирования. Тезисно (tl;dr) статья умещается в несколько пунктов:
- современное логическое программирование != Пролог;
- ASP хорош для решения комбинаторных задач;
- вероятностное логическое программирование подходит для моделей вида: правила + вероятность;
- лучше всего использовать ASP и ЛП для создания прототипов и тестирования идей: «а нам вообще что-то даст это дополнительное ограничение?», «против чего тестировать будем?», etc;
- если у вас нет хороших идей, как написать быстрый поиск к трудной задаче с ограничениями, скорее всего вам пригодится ASP и это будет быстрее и надежнее лобового решения.
Как поставить тире на клавиатуре компьютера или ноутбука?
Постулаты Go
В игре Go очень простые правила, но стать мастером в ней непросто, нужно научиться думать паттернами, территориями и прочими стратегическими концепциями. Язык Go не совсем случайно назван аналогично названию этой игры. В своем выступлении на недавнем митапе в Сан-Франциско, Роб Пайк упомянул книгу «Постулаты Go» (Go Proverbs), которые описывают сложные стратегии простыми поэтичными фразами. Эти постулаты несут глубинный смысл для тех, кто знаком с игрой Go, и могут казаться пустыми фразами тем, кто не знаком. И в этом нетехническом докладе он предложил придумать аналогичным способом «постулаты» и для языка Go.
Вот некоторые из них:
- Don’t communicate by sharing memory, share memory by communicating.
- Concurrency is not parallelism.
- Channels orchestrate; mutexes serialize.
- The bigger the interface, the weaker the abstraction.
- interface{} says nothing.
- Gofmt’s style is no one’s favorite, yet gofmt is everyone’s favorite.
- A little copying is better than a little dependency.
- Cgo is not Go.
- Clear is better than clever.
- Reflection is never clear.
- Errors are values.
Это чем-то похоже на Zen of Python. Вы можете не соглашаться с ними, но эти постулаты отражают идиоматичность и подход в Go. Давайте разберем подробнее каждый из них по мотивам доклада (видео в конце поста).
JSON с опциональными полями в Go
Перевод
Один из наиболее распространенных видов данных, хранящихся в конфигурационных файлах, — это опции. В этой статье я расскажу о некоторых нюансах, которые необходимо учитывать при сохранении опций в JSON и их анмаршалинге в Go.
В частности, наиболее важное различие между опциями и любыми другими данными заключается в том, что опции зачастую, извините за каламбур… опциональны. Наша программа может иметь большое количество всевозможных параметров конфигурации (опций), но нам может понадобиться инициировать какую-либо конкретную инвокацию только с ограниченным их подмножеством, оставив для всего остального значения по умолчанию
Blockchain на Go. Часть 1: Прототип
- Перевод
- Tutorial
- Blockchain на Go. Часть 1: Прототип
- Blockchain на Go. Часть 2: Proof-of-Work
- Blockchain на Go. Часть 3: Постоянная память и интерфейс командной строки
- Blockchain на Go. Часть 4: Транзакции, часть 1
- Blockchain на Go. Часть 5: Адреса
- Blockchain на Go. Часть 6: Транзакции, часть 2
- Blockchain на Go. Часть 7: Сеть
Блокчейн одна из самых революционных технологий 21 века, до сих пор не реализовавшая весь свой потенциал. По сути, блокчейн это просто распределенная база данных. Что же делает ее уникальной? Это база данных полностью открыта и хранится у каждого участника полной или частичной копией. Новая запись создается только с согласия всех кто хранит базу. Благодаря этому существуют такие вещи как криптовалюта и умные контракты.
В этой серии уроков мы создадим, основанную на блокчейне, упрощенную криптовалюту. В качестве языка используем Go.
Тестирование веб-сервиса на Go
Tutorial
В этой статье хотелось бы поделиться одним из способов простого и удобного интеграционного тестирования http-сервиса, написанного на Go. Интеграционные тесты бывает непросто создавать так, чтобы обходиться без сложных скриптов, но на помощь нам придет Docker, пакет из стандартной библиотеки httptest и билд-теги. Для примера мы будем использовать MySQL базу данных с миграциями, управляемыми пакетом goose. Финальной целью является получить простое и удобное кроссплатформенное интеграционное тестирование простым запуском команды go test, будь это рабочий ноутбук или Continuous Integration сервер.
Go, Vue и 3 дня на разработку: система реального времени для мониторинга пациентов
Перевод
В ноябре 2019 года люди услышали о первых случаях неизвестной смертельно опасной болезни в Китае. Теперь все знают о том, что эта болезнь называется COVID-19. Видимо, эпидемия навсегда изменила тот мир, который мы знали. Вирус опасен и очень заразен. И человечество пока не особенно много знает о нём. Очень надеюсь, что скоро будет найдено лекарство от этой болезни.
Природа вируса такова, что очень сложно помешать его распространению. В Шри-Ланке, где я живу, мы столкнулись с такой же ситуацией, с которой столкнулись люди в других странах. Здесь я хочу рассказать о том, как программисты смогли оказать посильную помощь тем, кто сражается с болезнью лицом к лицу.
Technical Details
Инструменты для разработчика Go: знакомимся с лейблами профайлера
Перевод
Привет. Меня зовут Марко. Я системный программист в Badoo. Представляю вашему вниманию перевод поста замечательной rakyll о новой фиче в Go 1.9. Мне кажется, что лейблы будут очень полезны для профилирования ваших Go-программ. Мы в Badoo, например, используем аналогичную штуку для того, чтобы тегировать куски кода в наших программах на С. И если срабатывает таймер и в лог выводится стек-трейс, то в дополнение к нему мы выводим такой вот тег. В нем, например, может быть сказано, что мы обрабатывали фотографии пользователя с определенным UID. Это невероятно полезно, и я очень рад, что похожая возможность появилась и в Go.
Собственный поисковик по раздачам The Pirate Bay
Из песочницы
В последнее время на хабре стало популярно делать собственные поисковики по RuTracker. Мне это показалось прекрасным поводом для того, чтобы отойти от скучной enterprise разработки и попробовать что-нибудь новое.
Итак, задача: реализовать на локалхосте поисковик по базе The Pirate Bay и попутно попробовать, что же такое frontend разработка и с чем её едят. Задача осложняется тем, что TPB не публикует своих дампов, в отличие от RuTracker, и для получения дампов требуется распарсить их сайт. В результате гугления и осмысления задачи я решил в качестве поисковика использовать Elasticsearch, для которого написать client-side only фронтенд на AngularJS. Для получения данных я решил написать собственный парсер сайта TPB и отдельный загружатель дампа в индекс, оба на Go. Пикантность выбору придавал тот факт, что ни к Elasticsearch, ни к AngularJS я до этого ни разу не прикасался и именно их опробывание было моей настоящей целью.
CourseHunter
В этом курсе вы узнаете, как тестировать РЕАЛЬНОЕ программное обеспечение, а не функции палиндрома.
В одном проекте вы создадите веб-приложение, которое позволит вам решать сложности, возникающие при тестировании приложения, использующего базу данных, сторонние API и многое другое. В другом проекте вы рассмотрите, как внутреннее тестирование помогает проверить правильность промежуточных шагов, а также обсуждаем недостатки тестирования не экспортируемых функций.
Вы узнаете о распространенных ошибках, которых следует избегать, чтобы написать более тестируемый код. Вы узнаете, как постепенно исправлять код, который уже поддался многим из этих ловушек.
Когда вы запускаете приложение с глобальной переменной БД, вам не нужно отказываться от тестирования. Вы точно узнаете, как вносить небольшие, управляемые изменения в код, которые позволят вам начать его тестирование практически сразу.
Раскраска графа
Дан граф:
Нужно раскрасить его вершины в три цвета (красный-синий-зеленый), так чтобы никакие две соседние вершины не были одинакового цвета, либо сказать, что это невозможно.
Выход:
(картинки взяты отсюда)
Основные конструкции ASP кода мы уже разобрали — пройдемся по остальным элементам: node/1 (node(a). node(b)…) — объявляет множество вершин графа, порядок не важен, edge/2 — объявляет дуги. Такие атомы в ASP (и логическом программировании) называются — фактами, фактически это сокращение от “a :- true.”, а выводится просто из утверждения, которое всегда верны, т.е., атомы задают данные программы.
Обзор функций
Что такое Tokio и Async I/O и зачем это нужно?
Перевод
Сообщество Rust в последнее время сконцентрировало много своих усилий на асинхронном вводе/выводе, реализованном в виде библиотеки . И это замечательно.
Многим из участников сообщества, тем, которые не работали с веб-серверами и связанными с этим вещами, не ясно, чего же мы хотим добиться. Когда эти вещи обсуждались во времена версии 1.0, я тоже имел смутное представление об этом, никогда прежде не работав с этим раньше.
- Что это такое — Async I/O?
- Что такое корутины (coroutines)?
- Что такое легковесные нити (threads)?
- Что такое футуры? (futures)?
- Как они сочетаются между собой?
Рассмотрим модели многопоточности на примере Rust и Go.
Вызов функций Go из других языков
Перевод
С версии 1.5 компилятор Go поддерживает несколько режимов сборки, определяемых флагом . Их ещё называют режимами исполнения Go (Go Execution Modes). С их помощью может компилировать пакеты Go в нескольких форматах, включая архивы и библиотеки общего пользования Go (shared libraries), архивы и библиотеки общего пользования Си, а с версии 1.8 — и динамические плагины Go.
В статье мы рассмотрим компилирование пакетов Go в библиотеки Си. В этом режиме сборки компилятор генерирует стандартный бинарный файл объекта (shared object) (.so), передавая функции Go в качестве API в стиле Си. Мы поговорим о том, как создавать библиотеки Go, которые можно вызывать из C, Python, Ruby, Node и Java.
Весь код доступен на GitHub.
slit — новое слово в мире PAGERов, либо как тратить меньше времени на просмотр логов
Так уж вышло, что мне регулярно приходится просматривать много логов. Одно радует, не так много как у людей работающих вместе со мной у которых порой это основная работа. Логи эти не лежат в в какой либо централизованной системе, а хранятся в s3 и смотрим мы их скачивая с перенаправлением вывода в less.
less установлен у всех, все привыкли с ним работать, знают о базовых вещах, как поиск вперед-назад, фильтрация по &, переход в конец(G) файла, переход в начало(g) и так далее.
А так же, все уже смирились с тем, что в любой момент, при добавлении фильтра less может подвиснуть на неопределенный срок, выводить по строчке в 5 секунд и так далее. В конечном счете, особенно при считывании логов с stdin — приходится быть аккуратным. Фильтр может сработать, а может и не сработать.
Собственно, в тот момент, что и мне выпала участь в течении нескольких дней пройтись через этак пару сотен лог-файлов — стало очевидно — мир нужно менять к лучшему…
Под катом демо (gif 2.2mb) и немного истории.
О плюсах и минусах Go
В данной статье я хочу поделиться опытом, полученным в ходе переписывания одного проекта с Perl на Go. В ней будет больше о минусах, чем о плюсах, ибо о достоинствах Go и так поведано немало, а вот о подводных камнях, ожидающих новых разработчиков, узнать зачастую, кроме как от собственных шишек — неоткуда. Пост никоим образом не преследует цели охаять язык Go, хотя, признаться, некоторые вещи я был бы рад не писать. Также в нем охвачено сравнительно небольшой срез всей платформы, в частности, не будет ничего о шаблонах, регекспах, распаковке/запаковке данных и подобного, часто используемого в веб-программировании, функционала.
Python или Go — Что быстрее для веб-разработки?
Кому знакома ситуация, когда хочется поскорее закончить работу и как-то развлечься? Конечно всем. А ведь скорость увеличивает производительность. Python быстр при разработке сайтов и является многофункциональным языком, но Golang может оказаться быстрее, чем Python.
Golang является неплохим языком для написания серверных сценариев и для высокой производительности. Golang предлагает быстрые циклы разработки. Производительность — это ключ, а Golang — мастер скорости и производительности.
Golang также обладает лучшей поддержкой многопоточности. Python требует большего использования ресурсов высшего уровня для процесса многопоточности, тогда как Golang лучше экономит ресурсы и память с помощью изолированных горутин.
При работе с бэкендем, Golang несомненно выигрывает, он отлично работает с большим количеством запросов с высокой конкурентностью. У Golang также более низкий порог входа, чем у Python. В общем и целом Golang спроектирован для людей, которые хотят создавать сайты максимально быстро.
Надёжность Go в инфраструктуре Dropbox
Перевод
Об авторе: Тэмми Бутов — технический руководитель инфраструктуры для разработчиков в Dropbox. Это управление потоками кода — полный цикл использования Go в Dropbox, от программирования до выпуска. Она выступала на конференции GopherCon 2017 на тему того, как разработчики Dropbox создают и поддерживают работу крупномасштабных сервисов на Go.
Как Dropbox пришёл к использованию Go
Тэмми цитирует статью Роба Пайка «Go в компании Google: языковой дизайн в службе разработки ПО» от 2012 года, поскольку она в целом хорошо передаёт, почему Go хорошо работает и в Dropbox:
Масштаб Dropbox впечатляет:
- Более 500 млн пользователей
- 200 000 бизнес-пользователей
- 500 петабайт пользовательских данных
- Многоэкзабайтная система хранения Go
Настройка окружения
Для начала скачаем 64-битную версию Go c официального сайта. В зависимости от используемой операционной системы выполняем следующие действия.
Извлекаем скачанный архив в папку . Например:
Добавляем папку в переменную окружения :
Windows
Используем MSI файл и следуем инструкциям. По умолчанию инструменты Go размещаются в папке . При установке папка автоматически добавится в системную переменную .
Чтобы изменения вступили в силу, перезапустим все открытые окна эмуляторов терминала.
Проверяем корректность установки, создав и выполнив файл :
Выполним этот код и получим следующий результат:
Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS
Привет, меня зовут Иван, и я делаю Авито Доставку. Когда пользователь покупает товар с доставкой, мы показываем ему список отделений служб доставки с ценами. Цена доставки может меняться от отделения к отделению. Мы смотрим на область карты, где покупатель ищет товар и информацию по объявлению, например, координаты продавца, вес и размеры товара. И на выходе показываем человеку список отделений с адресами и ценой доставки в каждое из них.
В ходе разработки калькулятора цены доставки возникла такая задача: есть структура базы данных PostgreSQL и запрос к ней от сервиса на Go. Нужно заставить всё это работать достаточно быстро. В итоге нам удалось поднять пропускную способность сервиса с 50 до 5000 RPS и выявить пару нюансов при общении сервиса с базой. Об этом и пойдёт рассказ.
Почему вам стоит изучить Go?
- Из песочницы
Всем привет! Представляю вашему вниманию мой перевод статьи (включая графики) Кевала Патела Why should you learn Go? Статья содержит много интересных фактов, которые, по моему мнению, будет полезно узнать новичкам в Go.
P.S.: Статья, как и большинство статей, на мой взгляд, отражает опыт и мнение автора, которое может не совпадать с вашим, и это нормально — сколько людей, столько и мнений.Изображение взято с ресурса kirael-art.deviantart.com/art/Go-lang-Mascot-458285682
За последние пару лет произошёл мощный рост нового языка программирования: Go, или Golang. Согласитесь, ничто так не может свести с ума разработчика, как новый язык программирования. Поэтому, я начал изучать Go 4-5 месяцев назад и вот что я могу сказать о том, почему вам стоит изучить этот новый язык.
Мириады запущенных задач на C#
Недавно на ресурсе Medium были опубликованы две статьи от одного и того же автора, затрагивающие функциональность C# async/await.
Основными выводами были:
- рекурсивный вызов асинхронного метода в C# подвержен StackOverflowException
- goroutine’ы лучше задач (тасков) в .NET в плане производительности
Но главная проблема вышеприведенных публикаций — абсолютное непонимание модели кооперативной многозадачности в C# с вводом читателей в заблуждение. Сами же бенчмарки — бессмысленные, как мы увидим позже.
Далее в статье я попытаюсь раскрыть суть проблемы более подробно с примерами решения.
NB: использоваться будут свежевыпущенный .NET Core 2.0 и Go 1.8.3.
Google выпустила финальную версию языка программирования Go 1
Вчера стало известно о том, что поисковый гигант выпустил финальную версию языка программирования Go 1, анонс о котором появился в 2009 году. Загрузить бинарные дистрибутивы языка для Linux, FreeBSD, Mac OS и Windows можно здесь. Язык выпущен под лицензией BSD.
Язык Go1, согласно команде его разработки, представляет из себя «попытку объединить скорость разработки динамических языков, таких как Python, с производительностью и безопасностью компилируемых языков, таких как C или C++» Справедливости ради, один из инженеров Google, занимающихся новым языком, признаёт, что экосистема языка ещё развита недостаточно — отсутствует IDE и набор поставляемых библиотек не очень большой, но, тем не менее, компания активно работает над улучшением ситуации.
Поговорим о Golang (Go)
Разработанный командой Google в 2009, язык Go стал решением многих проблем. Целью было создание языка, что забрал бы весь багаж и излишки языков C, C++. Это повышает производительность и скорость, что делает работу с ним более приятной. Кроме того, большинство разработчиков, впервые использующих Go, быстро вникнут в суть дела из-за знакомых элементов и простоты использования.
Это не значит, что язык идеален во всех случаях. Несмотря на то, что скорость и элегантность поднимаются на следующий уровень, некоторые вещи оставляют желать лучшего. У Golang нет обширной библиотеки или поддержки наследования. Кроме того, нет GUI библиотеки или поддержки объектно-ориентированного программирования. Для этого используются горутины, стандартная библиотека, надежная встроенная безопасность и легкий код с минимальным синтаксисом.
[Перевод] Почему Go не так хорош
Из песочницы
Всем привет! Недавно вышел перевод статьи о том, как TJ Holowaychuk прощался с Node.js, решив двигаться в сторону Go. В конце статьи была ссылка на посвящённый сравнению и критике языка Go пост Уилла Ягера, который просили перевести — собственно, с результатами перевода я и предлагаю ознакомиться. Я пытался более-менее сохранить как многословный стиль изложения, присущий автору, так и оригинальную разбивку на предложения и параграфы.
Буду очень рад любым конструктивным замечаниям и предложениям по переводу, опечаткам и/или оформлению, но очень прошу помнить, что точка зрения переводчика может не совпадать с позицией автора переведённой статьи.