Go

Содержание:

Как поставить тире на клавиатуре компьютера или ноутбука?

man!( Go => D ).concurrency

Многозадачность — это то, что реализовано в Go по настоящему хорошо, хоть и не идеально. Приятный синтаксис с терпким послевкусием, простые и мощные абстракции, подкупают своим изяществом по сравнению с остальными императивными языками. А попробовав лучшее, уже так не хочется скатываться к посредственности. Поэтому, если и переходить на другой язык, то он должен быть ещё более выразителен и с не менее толковой реализацией многозадачности.
Если вы уже наигрались с Go, устали от копипасты, ручного жонглирования мьютексами и всерьёз подумываете о приобретении протезов для рук, то позвольте предложить вашему вниманию перевод Tour of the Go с эквивалентным кодом на D и краткими пояснениями.

Python или Go — Что быстрее для веб-разработки?

Кому знакома ситуация, когда хочется поскорее закончить работу и как-то развлечься? Конечно всем. А ведь скорость увеличивает производительность. Python быстр при разработке сайтов и является многофункциональным языком, но Golang может оказаться быстрее, чем Python.

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

Golang также обладает лучшей поддержкой многопоточности. Python требует большего использования ресурсов высшего уровня для процесса многопоточности, тогда как Golang лучше экономит ресурсы и память с помощью изолированных горутин.

При работе с бэкендем, Golang несомненно выигрывает, он отлично работает с большим количеством запросов с высокой конкурентностью. У Golang также более низкий порог входа, чем у Python. В общем и целом Golang спроектирован для людей, которые хотят создавать сайты максимально быстро.

Почему вам стоит изучить Go?

  • Из песочницы

Всем привет! Представляю вашему вниманию мой перевод статьи (включая графики) Кевала Патела Why should you learn Go? Статья содержит много интересных фактов, которые, по моему мнению, будет полезно узнать новичкам в Go.
P.S.: Статья, как и большинство статей, на мой взгляд, отражает опыт и мнение автора, которое может не совпадать с вашим, и это нормально — сколько людей, столько и мнений.Изображение взято с ресурса kirael-art.deviantart.com/art/Go-lang-Mascot-458285682
За последние пару лет произошёл мощный рост нового языка программирования: Go, или Golang. Согласитесь, ничто так не может свести с ума разработчика, как новый язык программирования. Поэтому, я начал изучать Go 4-5 месяцев назад и вот что я могу сказать о том, почему вам стоит изучить этот новый язык.

Blockchain на Go. Часть 2: Proof-of-Work

  • Из песочницы
  • Tutorial

Привет, Хабр! Представляю вашему вниманию перевод статьи «Building Blockchain in Go. Part 2: Proof-of-Work».
Содержание

  1. Blockchain на Go. Часть 1: Прототип
  2. Blockchain на Go. Часть 2: Proof-of-Work
  3. Blockchain на Go. Часть 3: Постоянная память и интерфейс командной строки
  4. Blockchain на Go. Часть 4: Транзакции, часть 1
  5. Blockchain на Go. Часть 5: Адреса
  6. Blockchain на Go. Часть 6: Транзакции, часть 2
  7. Blockchain на Go. Часть 7: Сеть

Вступление

В предыдущей статье мы построили очень простую структуру данных, которая является основой для базы данных блокчейна. Также мы сделали добавление в нее блоков с цепной связью между ними: каждый блок связан с предыдущим. Увы, наша реализация блокчейна имеет один существенный недостаток: добавление блоков в цепочку слишком простое и дешевое.
Одним из краеугольных камней Биткоина и блокчейна является то, что добавление новых блоков должно быть достаточно сложной работой. И сейчас мы собираемся исправить этот недостаток.

Go for IT. Часть первая

Неуловимый Go.

Помните анекдот про неуловимого Джо? Именно восклицанием «Да кому он нужен!», прозвучавшим в форме вопроса «», был встречен на Хабре релиз первой стабильной версии GO 1.
Именно на этот вопрос я хочу ответить циклом статей, оформленных в необычном для Хабра формате — в виде пошаговой совместной разработки действующего веб-проекта — с живым обсуждением и добавлением функционала. А чтобы вдвойне оправдать внесение цикла ещё и в хаб «Высокая производительность», мы поставим перед собой задачу создать не просто «хомяка», а проект, который наглядно продемонстрирует habri et orbi способность выдерживать значительные естественные нагрузки.Вместо аперитива: реализация простейшего динамического веб-приложения на языке Go работает в 5-20 раз быстрее аналогичной Python-реализации. И всего в два раза уступает скорости отдачи статики Nginx-ом.
В рамках этого проекта, помимо самого языка Go, мы косвенно затронем и другие (относительно новые) технологии веб-разработки — HTML5, CSS3, Redis, MongoDB. Также я постараюсь вытащить из закутков долговременной памяти некоторые из трюков в области безопасности и экономии на спичках, коих накопилось много за полтора десятка лет работы в этой области. Устраивайтесь поудобнее, запасайтесь терпением и кофе — под катом «много букв», а ведь это только вводная часть 🙂

О репозиториях замолвите слово

В последнее время на хабре, и не только, можно наблюдать интерес GO сообщества к луковой/чистой архитектуре, энтерпрайз паттернам и прочему DDD. Читая статьи на данную тему и разбирая примеры кода, постоянно замечаю один момент — когда дело доходит до хранения сущностей предметной области — начинается изобретение своих велосипедов, которые зачастую еле едут. Код вроде бы состоит из набора паттернов: сущности, репозитории, value object’ы и так далее, но кажется, что они для того там “чтобы были”, а не для решения поставленных задач.
В данной статье я бы хотел не только показать, что, по моему мнению, не так с типичными DDD-примерами на GO, но также продемонстрировать собственную ORM для реализации персистентности доменных сущностей.

Кодогенерация в языке Go

Tutorial

В данной статье хотелось бы рассмотреть некоторые возможности кодогенарации в рамках языка Go, которые могут частично заменить встроенную рефлексию и не потерять типобезопасность на этапе компиляции.
Язык программирования Go предоставляет мощные инструменты для кодогенерации. Очень часто Go ругают за отсутствие обобщений (generics) и это в самом деле может стать проблемой. И вот тут на помощь приходит кодогенерация которая на первый взгляд довольно трудна для небольших рутинных операций, но тем не менее является достаточно гибким инструментом. Уже существует некоторое количество готовых библиотек кодогенерации покрывающих базовые потребности в обобщениях. Это и «эталонный» stringer и более полезные jsonenums с ffjson А мощный gen и вовсе позволяет добавить в Go немного функциональщины, в том числе добавляет аналог так не хватаемого многим forEach для пользовательских типов. Ко всему прочему gen довольно легко расширяется собственными генераторами. К сожалению gen ограничен кодогенерацией методов для конкретных типов.
Собственно тему кодогенерации я решил затронуть не от хорошей жизни, а из за того, что столкнулся с небольшой задачей для которой не смог найти другого подходящего решения.

CourseHunter

В этом курсе вы узнаете, как тестировать РЕАЛЬНОЕ программное обеспечение, а не функции палиндрома.

В одном проекте вы создадите веб-приложение, которое позволит вам решать сложности, возникающие при тестировании приложения, использующего базу данных, сторонние API и многое другое. В другом проекте вы рассмотрите, как внутреннее тестирование помогает проверить правильность  промежуточных шагов, а также обсуждаем недостатки тестирования не экспортируемых функций.

Вы узнаете о распространенных ошибках, которых следует избегать, чтобы написать более тестируемый код. Вы узнаете, как постепенно исправлять код, который уже поддался многим из этих ловушек.

Когда вы запускаете приложение с глобальной переменной БД, вам не нужно отказываться от тестирования. Вы точно узнаете, как вносить небольшие, управляемые изменения в код, которые позволят вам начать его тестирование практически сразу.

Редактирование «Автозамены»

Учебный центр «Специалист»

Курс посвящен основам языка Go. Целью курса является изучение базовых концепций и синтаксиса языка Go.

Курс включает в себя рассмотрение синтаксиса языка Go , а также базовых инструментов стандартной библиотеки Go для создания простейших CLI и веб-приложений.
Курс основан на опыте практического применения языка Go в современной backend разработке. Курс включает в себя не только практическую, но и теоретическую часть, и таким образом не сводится к простому «сборнику рецептов».
Курс читается на базе ОС Linux. Обучение проводится на примере популярнейшего дистрибутива Ubuntu. Однако большинство технологий, изучаемых на курсе, могут применяться и на базе Windows.

Вы научитесь:

Использовать язык Go для создания как консольных утилит, так и простейших макетов веб-сервисов

Blockchain на Go. Часть 1: Прототип

  • Перевод
  • Tutorial
  1. Blockchain на Go. Часть 1: Прототип
  2. Blockchain на Go. Часть 2: Proof-of-Work
  3. Blockchain на Go. Часть 3: Постоянная память и интерфейс командной строки
  4. Blockchain на Go. Часть 4: Транзакции, часть 1
  5. Blockchain на Go. Часть 5: Адреса
  6. Blockchain на Go. Часть 6: Транзакции, часть 2
  7. Blockchain на Go. Часть 7: Сеть

Блокчейн одна из самых революционных технологий 21 века, до сих пор не реализовавшая весь свой потенциал. По сути, блокчейн это просто распределенная база данных. Что же делает ее уникальной? Это база данных полностью открыта и хранится у каждого участника полной или частичной копией. Новая запись создается только с согласия всех кто хранит базу. Благодаря этому существуют такие вещи как криптовалюта и умные контракты.

В этой серии уроков мы создадим, основанную на блокчейне, упрощенную криптовалюту. В качестве языка используем Go.

Планировщик Go

Перевод

Преамбула от переводчика: Это достаточно вольный перевод пусть и не самой свежей (июнь 2013 года), но доходчивой публикации о новом планировщике параллельных ветвей исполнения в Go. Достоинством этой заметки есть то, что в ней совершенно просто, «на пальцах» описывается новый механизм планирования для ознакомления. Тем же, кого не устраивает объяснение «на пальцах» и кто хотел бы обстоятельного изложения, рекомендую Scheduling Multithreaded Computations by Work Stealing — 29 страниц изложения со строгим и сложным математическим аппаратом для анализа производительности, 48 позиций библиографии.

Введение

Одной из наибольших новинок в Go 1.1 стал новый диспетчер, спроектированный Дмитрием Вьюковым (Dmitry Vyukov). Новый планировщик дал настолько разительное увеличение производительности для параллельных программ без изменений кода, что я решил написать что-нибудь об этом.

Как работает программа распознавания лиц?

Хобби-проект польского разработчика — усовершенствованная и дополненная версия языка Go

Один из признаков того, что язык программирования имеет успех, – появление новых языков на его основе. Известным примером является JavaScript. На его базе возникли такие языки, как TypeScript, GorillaScript, Kaffeine, Sweet.js и так далее.
Со временем язык программирования Go, разработанный компанией Google, сможет соперничать с JavaScript по количеству надстроек и диалектов.
Миру уже был явлен Oden – функциональный язык со статической типизацией, разработанный в рамках экосистемы Go. В то же время он создавался как надстройка Go и впитал в себя его лучшие стороны.
А теперь появился новый язык – Have, который имеет все шансы стать усовершенствованной и дополненной версией Go.

Technical Details

Обзор функций

Куда обращаться за помощью?

Этот вопрос актуален для тех, кто не готов самостоятельно выполнять вышеописанные действия. Позвонить лучше всего в диспетчерскую службу Вашей управляющей компании, если таковая имеется. Можно вызвать электрика из любой организации, оказывающей услуги такого рода. Диспетчеру следует сообщить, что конкретно перестало работать, есть ли свет, как это произошло: после того, как сгорел электроприбор, после короткого замыкания или потопа. Как вы понимаете за услуги электрика придется заплатить вам или вашим соседям, если вина на их стороне (к примеру, затопили вас, в результате чего перестали работать розетки в половине квартиры либо одной комнате).

Пакеты

Представленной информации вполне достаточно для создания простейших программ, поэтому можно перейти к обсуждению архитектуры go-программы. Каждая программа – это пакет (см. в листинге 1), а точнее набор пакетов. Программы собираются из пакетов, и то, что обычно называется библиотеками, в go называется набором пакетов.

Исполняемая программа должна иметь пакет и метод , с которого начинается выполнение программы, и по завершении которого программа закрывается. Выражение дает доступ к методам, переменным и константам пакета . Обращаться к ним следует через оператор (точка), например, .

Область видимости в go несколько отличается от таковой в языке С. Внутри пакета все переменные, функции, константы и типы имеют глобальную видимость. Но для обращения к ним из клиента, импортировавшего этот пакет, имена последних должны начинаться с большой буквы.

Например, клиент импортировал пакет package, в котором объявлены следующие переменные:

const hello = “Im not visible in client, just in package” //видна только в пакете
const Hello = “I can say hello to client” //видна также при импорте

Хотя язык go достаточно молод, он уже имеет обширную библиотеку пакетов. Выше использовался пакет , предназначенный для форматированного ввода/вывода. Пакет предоставляет доступ к файлам, аргументам командной строки, позволяет запускать другие программы и т.д. Есть пакеты для шифрования, сжатия, кодирования и журналирования. Отдельного внимания заслуживают пакеты , , для работы с сетью, позволяющие без особых усилий создавать Web-приложения. В стандартной поставке есть даже пакет для работы с изображениями. После установки в каталоге $HOME/go появляется каталог pkg, в котором есть каталог, соответствующей архитектуре. В этом каталоге выполняется хранение и поиск пакетов.

GopherCon Russia 2018: программа конференции готова

Всем привет!
Продолжаем рассказывать про GopherCon Russia, который пройдет 17 марта в Москве. В прошлом посте мы прошлись по первой половине программы, а теперь она готова полностью. Например, на конференцию приедут и выступят ведущий подкаста Go Time Brian Ketelsen и технический евангелист Microsoft Ashley McNamara.
Напомним, что будет два параллельных потока докладов с 10.00 до 19.00, огненное афтепати в баре с 19.00 и до упора, крутые активности от наших партнеров. Кстати, 16 марта тоже будет пара камерных событий о Go, подробности coming soon. На конференцию ждем 400 участников (200 из них уже зарегистрировались), присоединяйтесь!
Если вы очень-очень любите Go, то можете не читать дальше, а сразу регистрироваться на сайте. Цена билета — 7000 рублей.Итак, кто и о чем еще расскажет:

Лучшие планшеты для детей от 7 до 10 лет

Как мы выбирали между Elastic и Tarantool, а сделали свою (самую быструю) in-memory БД. С Join и полнотекстовым поиском

Всем привет.

С середины 2016 года мы проектируем и разрабатываем новое поколение платформы. Принципиальное отличие от первого поколения — поддержка API «тонкого» клиента. Если старая платформа предполагает, что на клиента при запуске загружается метаинформация о всем контенте, который доступен для абонента, то новая платформа должна отдавать срезы данных отфильтрованные и отсортированы для отображения на каждом экране/странице.

Высокоуровневая архитектура на уровне хранения данных внутри системы — постоянное хранение всех данных в централизованном реляционном SQL хранилище. Выбор пал на Postgres, тут никаких откровений. В качестве основного языка для разработки — выбрал golang.

У системы порядка 10м пользователей. Мы посчитали, что с учетом профиля теле-смотрения, 10М пользователей может дать сотни тысяч RPS на всю систему.

Это означает, что запросы от клиентов и близко не стоит подпускать к реляционной SQL БД без кэширования, а между SQL БД и клиентами должен быть хороший кэш.

Посмотрели на существующие решения — погоняли прототипы. Данных, по современным меркам у нас немного, но параметры фильтрации (читай бизнес-логика) — сложные, и главное персонализированные — зависящие от сессии пользователя, т.е. использовать параметры запроса как ключ кэширования в K-V кэше будет очень накладно, тем более пейджинг и богатый набор сортировок никто не отменял. По сути, под каждый запрос от пользователя формируется полностью уникальный набор отфильтрованных записей.

Чертежи верхних и нижних угловых шкафов

Рассмотрим чертежи различных конструкций для кухни.

Гнутые фасады и между ними угол со шкафами

Выигрышно смотрится кухонный гарнитур, в котором угол идет с закругленными шкафами. Это дает возможность комфортно мыть посуду и пользовать раковиной. Эта обтекаемая форма хорошо смотрится, если на одной стене будут стоять шкафы с выгнутыми дверцами.

Гарнитур хорошо впишется в следующие размеры комнаты: длина стены 2420х1750 мм. Данная конструкция имеет шкафы с гнутыми фасадами:

  • 900х900 мм – напольный угол;
  • 600х600 мм – навесной угол;
  • 320 мм, если изделие с выгнутыми дверцами;
  • 600 мм – место для вытяжки и встроенной техники.

Размер условный, так как на большой кухне можно установить вытяжку и варочную панель, каждую шириной до 90 см. Размер изделия с гнутым фасадом зависит от радиуса двери. Если изменить ширину шкафа, тогда уменьшится или увеличится фасад.

Если поменять размер с 900х900 мм на 700х700 мм, тогда необходимо сохранить стандартную глубину столешницы около 600 мм. Радиус двери получается маленьким, поэтому доступ в сам шкаф будет значительно ограничен.

То же самое относится и к навесному шкафу с дверью вогнутого типа. Глубина составит 300 мм, радиус фасада будет стандартных размеров, а ширина шкафа – 600х600 мм.

Угол с прямыми фасадами шкафов

Расчет схож с разметкой, как для гарнитура с угловой кухней и вогнутым углом. Особенности: форма прямоугольника, фасады прямые, столешница с завалом, она может состоять из нескольких фрагментов, целой её сложно сделать.

Этот вариант хорошо будет смотреться на кухне с размерами 2000х1500 мм. На короткой стене глубина столешнице должна составлять 400 мм. Для того чтобы уменьшить глубину столешницы, необходимо использовать шкаф с шириной 900х700 мм. Это дает возможность экономить пространство. Такой же вариант необходимо применить для шкафа, в котором вогнута дверь.

Необходимо помнить, что мойку в такой шкаф можно ставить только круглой формы, с диаметром до 490 миллиметров. На одну из стен вмонтировать барную трубу. Если глубина столешницы равна 400 мм, тогда навесные корзины с барной трубой должны быть не больше 350 миллиметров.

Угол 90 градусов

Прямой угол кухонному гарнитуру создают: приставной шкаф, ширина которого 750х1200 миллиметров, дверь – 400 мм, шкафы – 1100х1200 и 500х600 миллиметров. Шкаф 750х900 миллиметров используют на кухнях, в которых уменьшается глубина столешницы вдоль одной стены. Размеры шкафа 1000х600 дают возможность использовать столешницу 600 миллиметров.

Размер мойки в подобные столешницы должен быть меньше ширины самого шкафа на 100 миллиметров.

О том, как быстро рассчитать угловой модуль кухонного гарнитура, смотрите в следующем видео.

Ищем спикеров на Go meetup 14 апреля

Наше внутреннее сообщество Go-разработчиков в Mail.Ru Group активно развивается, коллеги регулярно встречаются для обмена опытом и полезными ресурсами

Мы знаем, как важно общаться с людьми из других команд и проектов, иметь возможность спросить совета, обсуждать только что появившиеся технологии и поделиться опытом. Около полугода назад в нашем офисе уже проходила встреча разработчиков на Go, и сейчас этот язык все еще вызывает большой интерес

Поэтому 14 апреля мы организуем очередной Go meetup. Приглашаем спикеров! От Mail.Ru Group уже заявлен один доклад. Подробности под катом.

Система под контролем: как автоматизировать интеграционные тесты

Tutorial

Привет! Меня зовут Ксения Якиль. Я пишу core-сервисы на C и Go в бэкенд-отделе Badoo и Bumble. Наш бэкенд — это высоконагруженная распределённая система, обслуживающая пользователей по всему миру. Она оперирует большими массивами данных и делает всю ту магию, благодаря которой люди находят друг друга. 

В этой статье я не буду концентрироваться на специфике наших сервисов, а расскажу, как мы реализовали автоматизированные интеграционные тесты в распределённой системе, поделюсь общими принципами и нюансами создания фреймворка для них. В тексте будут встречаться отсылки к реализации на Go, так как мы использовали именно этот язык, но понять основную мысль это не помешает.

Работа в IPFS с человеческим лицом

Из песочницы

Немногие слышали про IPFS, ещё более немногие добрались до детального изучения. И совсем уж единицы погрузились в проект поглубже.

Если вкратце, IPFS это химера, созданная из технологий, лежащих в основе git и bittorrent, с одной особенностью — адресация объектов по содержимому (CAS).

Любой объект, файл или пользовательские данные хэшируются, и получившийся хэш становится адресом этого файла в системе IPFS. Далее, этот контент могут запросить другие узлы сети, и он расползётся по планете, и в идеале, никогда больше не исчезнет, будучи доступным по хэшу. Из этого свойства так же вытекает иммутабельность объектов в системе, ведь любое изменение содержимого создаёт новый адрес-хэш в сети.

Типичная ссылка на объект: http://ipfs.io/ipfs/QmPQGujZ4K1xPNNcCjBWMoSuYrcJae43dukJP51mbfftDK

Go: десериализация JSON с неправильной типизацией, или как обходить ошибки разработчиков API

Недавно мне довелось разрабатывать на Go http-клиент для сервиса, предоставляющего REST API с json-ом в роли формата кодирования. Стандартная задача, но в ходе работы мне пришлось столкнуться с нестандартной проблемой. Рассказываю в чем суть.
Как известно, формат json имеет типы данных. Четыре примитивных: строка, число, логический, null; и два структурных типа: объект и массив. В данном случае нас интересуют примитивные типы. Вот пример json кода с четырьмя полями разных типов:

Как видно в примере, строковое значение заключается в кавычки. Числовое — не имеет кавычек. Логический тип может иметь только одно из двух значений: true или false (без кавычек). И тип null соответственно имеет значение null (также без кавычек).
А теперь собственно сама проблема. В какой-то момент, при детальном рассмотрении получаемого от стороннего сервиса json-кода, я обнаружил, что одно из полей (назовем его price) помимо числового значения периодически имеет строковое значение (число в кавычках). Т. е. один и тот же запрос с разными параметрами может вернуть число в виде числа, а может вернуть это же число в виде строки. Ума не приложу, как на том конце организован код, возвращающий такие результаты, но видимо, это связано с тем, что сервис сам является агрегатором и тянет данные из разных источников, а разработчики не привели json ответа сервера к единому формату. Тем не менее, надо работать с тем что есть.
Но далее меня ждало еще большее удивление. Логическое поле (назовем его active), помимо значений true и false, возвращало строковые значения «true», «false», и даже числовые 1 и 0 (истина и ложь соответственно).

Как Docker помог нам достичь (почти) невозможного

Перевод

С тех пор как мы начали работать над Iron.io, мы пытались решить проблему поддержания наших IronWorker-контейнеров в актуальном состоянии относительно новых сред выполнения и пакетов Linux. В течение последних двух лет IronWorker использовал одну и ту же среду выполнения без изменений. Пока, несколько недель назад, мы не выпустили в продакшен различные окружения для языков программирования.
С момента создания нашего сервиса, мы использовали только один контейнер, который содержал набор языковых сред и бинарных пакетов — Ruby, Python, PHP, Java, .NET и другие языки, а также библиотеки такие как ImageMagick, SoX и другие.
Этот контейнер и стратегия его использования начали устаревать, равно как и Ruby 1.9.1, Node 0,8, Mono 2 и прочие языки со старыми версиями, которые использовались в стеке по умолчанию. Со временем проблема стала ещё острее, поскольку люди начали использовать новые вещи, но были вынуждены изменять свой код для работы со старыми версиями языков.

Go или Python — Что выбрать?

В то время как Python остается фаворитом сообщества, удерживая второе место в первом квартале 2019 года за самый быстрый язык программирования на GitHub по количеству запросов (+ 17%), Golang не так уж сильно отстает и крепко держится на четвертом месте (+ 8%). Выбор между Golang и Python становится еще более размытым. Можно выделить несколько важных аспектов, которые следует учитывать при выборе.

Масштабируемость: Golang был создан с учетом масштабируемости. Он поставляется со встроенной конкурентностью для обработки нескольких задач одновременно. Python использует конкурентность, но она не встроена. Он реализует конкурентность через потоки. Это означает, что если вы собираетесь работать с большими наборами данных, то Golang может показаться более подходящим выбором;

Производительность: Python нельзя назвать лучшим по отношению к памяти или CPU, однако с его огромным количеством библиотек, Python эффективно выполняет основные задачи разработки. Golang обладает встроенными функциями и больше подходит для архитектур микросервисов;

Приложения: Python великолепен при написании кода для искусственного интеллекта, анализа данных, глубокого обучения и веб-разработки
Принимая во внимание, что Golang использовался для системного программирования, его любят разработчики, которые используют его для облачных и кластерных вычислений;

Сообщество и Библиотека: Как упоминалось ранее, возраст Python дает ему определенные преимущества. Одно из них — это большое количество библиотек и огромное сообщество, которое их поддерживает
Golang, с другой стороны, все еще является растущим языком и не имеет такого количества библиотек и поддержки сообщества, которыми обладает Python

Тем не менее, не стоит недооценивать Golang — его скорость роста и принятия разработчиками невероятна, и она растет с каждым днем.

Выполнение: Если скорость — самое важное, тогда выбор за Golang.

После рассмотрения все вышеперечисленных моментов ваш выбор языка должен проясниться. При создании команды разработчиков для создания микросервисов Golang будет более разумным выбором, поскольку он быстрый, простой и может превосходно масштабироваться. Python, с другой стороны, больше ориентирован на AI, ML и анализ данных.

Таким образом, в большинстве случаев Go выходит на первое место и считается верной альтернативой использованию Python. Разработчики должны выбирать язык программирования, учитывая природу и размер проекта разработки, а также набор своих навыков.

Хорошая новость заключается в том, что независимо от выбора, оба языка постоянно развиваются. Хотя Golang может показаться очевидным выбором в большинстве случаев, сообщество Python не бездельничает. Оба языка расширяются и растут. Это означает, что в будущем мы увидим больше функциональности и улучшений.

Организация кода в Go

  • Перевод
  • Tutorial

Зависимости. Дженерики. Они часто звучат в списке проблем в Go сообществе, но есть одна проблема, о которой вспоминают довольно редко — организация кода вашего пакета.

Каждое Go приложение, с которым я работал, похоже, имеет свой ответ на вопрос «Как я должен организовать код?». Некоторые приложения засовывают всё в один пакет, в то время, как другие группируют логику по типам или модулям. Без хорошей стратегии, которой придерживаются все члены команды, вы рано или поздно увидите, что код сильно разбросан по многочисленным пакетам. Нам нужен некий стандарт для дизайна кода в Go приложениях.

Я предлагаю подход получше. Следуя набору простых правил, мы можем добиться того, что код будет несвязанным, легко тестируемым и структура проекта будет цельная. Но прежде, чем мы углубимся в детали, давайте посмотрим на наиболее часто используемые подходы к структуризации Go кода.

Как ввести длинное тире на компьютере с операционной системой Windows

Библиотека Statsmodel в Python

С помощью пакета Statsmodel можно выполнять статистические вычисления, которые включают в себя описательную статистику, логический вывод, а также оценку для различных статистических моделей. Это способствует эффективному статистическому исследованию данных.

Ниже приведен пример реализации библиотеки Statsmodel в Python.

Python

import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf

input_data = sm.datasets.get_rdataset(«Guerry», «HistData»).data

res = smf.ols(‘Lottery ~ Literacy + np.log(Pop1831)’, data = input_data).fit()
print(res.summary())

1
2
3
4
5
6
7
8
9

importnumpy asnp

importstatsmodels.api assm

importstatsmodels.formula.api assmf

input_data=sm.datasets.get_rdataset(«Guerry»,»HistData»).data

res=smf.ols(‘Lottery ~ Literacy + np.log(Pop1831)’,data=input_data).fit()

print(res.summary())

Address Sanitizer, или Что делать, если не работает valgrind

Случилась непростая ситуация. Есть код, написанный на С, который активно используется через cgo в проекте, написанном на Go. В какой-то момент программа начала падать с ошибками от malloc: то segfault, то memory corruption.
Логичная мысль: нужен valgrind с его memcheck, чтобы проверить, кто лезет поперёк батьки в пекло в невалидную память. Однако, попытка скормить валгринду бинарник, полученный от go build, приведёт только к разочарованию — даже на простом Hello World валгринд разразится сотнями ошибок и отправит разработчика на известные координаты (спойлер: «Go fix your program!«).
Это происходит из-за того, что go runtime довольно специфичен и значительно отличается от такового в С. (Подробности можно спокойно найти по запросу «golang valgrind»).
Так как же нам разобраться, что происходит?

Пишем движок полнотекстового поиска на Go

Перевод

Полнотекстовый поиск — один из тех инструментов, которые мы используем практически каждый день, когда ищем какую-то информацию в интернете. Full-Text Search (FTS) — это метод поиска текста в коллекции документов. Документ может ссылаться на веб-страницу, газетную статью, сообщение электронной почты или любой структурированный текст.
Сегодня мы собираемся написать собственный движок FTS. К концу этой статьи он сможет выполнять поиск по миллионам документов менее чем за миллисекунду. Начнём с простых поисковых запросов, таких как «Выдать все документы со словом cat», а потом расширим движок для поддержки более сложных логических запросов.

Заключение

В 2009 go был признан языком года по версии организации TIOBE. Сложно сказать, насколько этот язык «созрел» для серьезных проектов, но его потенциал очевиден. Простота создания многопоточных и сетевых приложений позволяет говорить о жизнеспособности и востребованности проекта в целом. «Идеологическое родство» с языками С и С++, возможно, поможет языку go, как в свое время родство с С помогло развитию C++, а родство с C++ способствовало становлению Java. Огромную роль играет и поддержка со стороны разработчика языка – компании Google, возможно, самой влиятельной IT-компании на данный момент. В следующих статьях будут рассматриваться более сложные аспекты программирования на языке go.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector