30 лучших книг для освоения языка программирования Go


Оглавление (нажмите, чтобы открыть):

30 лучших книг для освоения языка программирования Go

4’266 подписчиков
1’743 просмотров на пост

Полезные материалы по всему, что может быть полезно разработчику на Go.

Детальная рекламная статистика будет доступна после прохождения простой процедуры регистрации

  • Детальная аналитика 70’046 каналов
  • Доступ к 28’004’146 рекламных постов
  • Поиск по 112’332’059 постам
  • Отдача с каждой купленной рекламы
  • Графики динамики изменения показателей канала
  • Где и как размещался канал
  • Детальная статистика по подпискам и отпискам

Найдено 638 постов

Библиотека для валидации строк, числовых значений, срезов и структур данных в Golang.

Go — современный язык программирования, разработанный корпорацией Google с целью сделать простой по сравнению с другими язык программирования, но не менее эффективный при разработке программного обеспечения и веб-приложений. Из руководства вы узнаете о том, как установить Go и настроить рабочее окружение, как использовать сторонние библиотеки и как пользоваться всеми возможностями языка.

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

Пишем собственные контроллеры для Kubernetes на Go,

Юнит-тестирование — важная часть профессиональной разработки приложений. Давайте посмотрим, как тестировать приложения, написанные на Go.

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

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

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

Если вы опытный разработчик на Golang, но не можете найти интересных практических задач, как насчет поучаствовать в опенсорс проекте? В данном списке собраны проекте, нуждающиеся в такой помощи.

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

Делаем ваш проект на Go лучше.

Если вам не требуется мощные СУБД по типу Postgres или MySQL, а что-то попроще, советуем простую низкоуровневую СУБД ключ-значение bolt.

Библиотека Go для создания аутентификации в ваших приложениях через социальные сети.

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

Забавная библиотека по генерированию аватаров. Для веб-приложений самое то.

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

Давайте посмотрим, чем же Go так красив, что мы его так любим.

Валидация входящих данных на Golang.

Основы чистой архитектуры на Golang.

Онлайн-книга по замечательному языку Go с примерами:

Книги, документация, статьи и курсы по Go

Рекомендуемая литература, документация, статьи и курсы для изучения языка Go.

2 ответа 2

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

  • A Tour of Go — хорошое пошаговое интерактивное руководство, построенное на примерах. Начать можно именно отсюда.
  • How to Write Go Code — пример разработки простого пакета на Go, в процессе которого можно ознакомиться с организацией кода проекта на Go, а также с инструментарием разработчика.
  • Effective Go — руководство по написанию чистого, идеоматического кода на Go. Читать обязательно, но после того, как уже есть какое-то представление об языке. Есть краткий пересказ на русском языке, но он, к сожалению, не поддерживается в актуальном состоянии.
  • Frequently Asked Questions — часто задаваемые вопросы по Go.
  • Go by Example — еще одно неплохое руководство, построенное на примерах.
  • C. Doxsey. An Introduction to Programming in Go — неплохая обзорная книга для начинающих, есть русский перевод.
  • M. Gieben. Learning Go — еще одна неплохая вводная книга по Go для начинающих.
  • M. Summerfield. Programming in Go: Creating Applications for the 21st Century — одна из первых бумажных книг по Go, довольно неплохая. Есть русский перевод, но само качество перевода не очень, много неточностей. Книга легко находится в электронном виде.
  • A. Donovan, B. Kernighan. The Go programming Language — еще одна бумажная книга по Go, включена сюда из-за имени Кернигана в авторах, с учетом всех его заслуг и того, насколько хороши другие его книги.
  • The Go Blog — официальный блог языка.
  • Golang Planet — агрегатор блог-постов на тему Go.
  • Habrahabr — хаб по Go на Habrahabr.
  • Awesome Go — огромный список фрейморков, библиотек и программного обеспечения, написанного на Go, структурированный по темам.
  • LearnConcurrency — подборка ссылок для изучения конкурентного программирования на Go.
  • S. Nilsson. Fundamentals of concurrent programming — статья по основам конкурентного программирования с примерами на Go.
  • Ю. Сердюк. Концепции параллелизма Go — краткое описание концепции конкурентного программирования в Go на русском.

Серверное и сетевое программирование

  • LearnServerProgramming — подборка ссылок для изучения программирования на Go на стороне сервера.
  • J. Newmarch. Network Programming with Go — неплохая книга по сетевому программированию на Go.
  • Writing Web Applications — статья о написании простого веб-приложения.
  • Build Web Application with Golang — довольно обширное руководство по Веб-программированию на Go; включает в том числе и краткое введение в сам язык.

Материалы на русском языке

Сюда для удобства также повторно включены русские переводы вышеприведенных материалов

5 языков программирования, которые надо учить первыми


Сегодня каждый, кто стремится попасть в IT, задается вопросом — какой язык программирования изучить? Все ищут универсальный ответ, который предопределит головокружительную карьеру. Да, до изобретения интернета и появления мобильных платформ можно было освоить один язык, написать на нем программу и быть востребованным разработчиком. Сегодня реалии таковы, что даже джуниорам предъявляется огромный список требований, среди которых — знание нескольких языков.

Судите сами: для веб-разработки неплохо бы владеть PHP, JavaScript, Python, Ruby, а еще HTML и CSS; в мобильной сфере — Swift, Objective-C, Java, C#. Перечень языков для создания десктопных приложений можно даже не начинать — по сути, все будут полезны. Именно поэтому мы взяли на себя ответственность назвать 5 языков программирования, которые надо изучить хотя бы шапочно, чтобы сегодня называться программистом.

Python

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

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

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

Стоит упомянуть, что на данный момент актуальны две версии: Python 2 и Python 3. Вам за основу лучше брать последнюю, так как поддержка Python 2, а значит — и активная разработка на ней, прекратится совсем скоро.

JavaScript

Следующий must have среди языков — JavaScript, для работы с ним хватит браузера. Синтаксис здесь на порядок сложнее: появляются служебные символы и конструкции с разношерстными скобками, названия функций далеко не всегда раскрывают суть действия, и даже простейший код имеет структурированный вид. Взглянем на переписанный код с функцией Фибоначчи:

Объем кода практически не изменился, зато снизилась читаемость. После изучения Python вы без проблем разберетесь, как работает структура return, и оцените удобство именно такого способа записи.

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

В целом, JavaScript незначительно уступает Python по спектру решаемых задач, но его возможности «глубже». Знание этого языка пригодится при разработке программ на любых платформах.

Если вы не определились с языком, значит еще не решили, что вас привлекает: веб, мобильные или десктопные приложения. Тогда ваше решение — C#, универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная). Для мира мобильных устройств установите Xamarian, а для веба пригодится ASP.NET.

Взглянем на наш код на языке C#:

Код вновь незначительно усложнился — это связано с использованием ключевого слова static. На этом этапе вы познакомитесь с грамотным использованием памяти, областями видимости данных и полностью погрузитесь в ООП. Ну, если не успели при знакомстве с JavaScript.

Swift

Подходим к самому интересному — языкам, безупречное владение которыми поможет вам попасть в сферу мобильной разработки. Swift не вполне универсален: он еще не полностью вытеснил Objective-C из приложений для Apple, но перспективы у него блестящие.

Четвертая версия Swift вышла в 2020 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже не «сырой» язык, а классический представитель верхушки рейтинга TIOBE с планомерным развитием. С помощью Swift вы можете создавать приложения для всех продуктов Apple: macOS, watchOS, iOS и любой новой системы, если она появится.

Посмотрим на код последовательности Фибоначчи:

Более двух десятков лет этот язык находится в списке самых востребованных, а это уже что-то значит. Сегодня он в основном ассоциируется с разработкой приложений для Android — но это лишь малая часть его возможностей. При помощи Java вы можете создавать графические виджеты для веба или писать десктопные приложения — принцип независимости от платформы и устройства в Java живет и процветает.

Кроме того, Java — великолепный язык, чтобы полноценно понять программирование: здесь реализованы все принципы ООП, организована работа с памятью и периферией, можно поупражняться с функциональным программированием.

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:

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

Заключение

К списку можно было бы добавить ряд полезных языков вроде PHP, C++ или Ruby. Или несколько функциональных для общего развития: Lisp, Haskell, Clojure. Впрочем, до этого вы обязательно дойдете. Но сперва выбирайте специализацию, записывайтесь на курсы GeekBrains и осваивайте пять описанных must know языков.

Сегодня каждый, кто стремится попасть в IT, задается вопросом — какой язык программирования изучить? Все ищут универсальный ответ, который предопределит головокружительную карьеру. Да, до изобретения интернета и появления мобильных платформ можно было освоить один язык, написать на нем программу и быть востребованным разработчиком. Сегодня реалии таковы, что даже джуниорам предъявляется огромный список требований, среди которых — знание нескольких языков.

Судите сами: для веб-разработки неплохо бы владеть PHP, JavaScript, Python, Ruby, а еще HTML и CSS; в мобильной сфере — Swift, Objective-C, Java, C#. Перечень языков для создания десктопных приложений можно даже не начинать — по сути, все будут полезны. Именно поэтому мы взяли на себя ответственность назвать 5 языков программирования, которые надо изучить хотя бы шапочно, чтобы сегодня называться программистом.

Python

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

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

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

Стоит упомянуть, что на данный момент актуальны две версии: Python 2 и Python 3. Вам за основу лучше брать последнюю, так как поддержка Python 2, а значит — и активная разработка на ней, прекратится совсем скоро.

JavaScript

Следующий must have среди языков — JavaScript, для работы с ним хватит браузера. Синтаксис здесь на порядок сложнее: появляются служебные символы и конструкции с разношерстными скобками, названия функций далеко не всегда раскрывают суть действия, и даже простейший код имеет структурированный вид. Взглянем на переписанный код с функцией Фибоначчи:

Мастер Йода рекомендует:  Востребованные хаки цикла WordPress

Объем кода практически не изменился, зато снизилась читаемость. После изучения Python вы без проблем разберетесь, как работает структура return, и оцените удобство именно такого способа записи.

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

В целом, JavaScript незначительно уступает Python по спектру решаемых задач, но его возможности «глубже». Знание этого языка пригодится при разработке программ на любых платформах.

Если вы не определились с языком, значит еще не решили, что вас привлекает: веб, мобильные или десктопные приложения. Тогда ваше решение — C#, универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная). Для мира мобильных устройств установите Xamarian, а для веба пригодится ASP.NET.

Взглянем на наш код на языке C#:

Код вновь незначительно усложнился — это связано с использованием ключевого слова static. На этом этапе вы познакомитесь с грамотным использованием памяти, областями видимости данных и полностью погрузитесь в ООП. Ну, если не успели при знакомстве с JavaScript.

Swift

Подходим к самому интересному — языкам, безупречное владение которыми поможет вам попасть в сферу мобильной разработки. Swift не вполне универсален: он еще не полностью вытеснил Objective-C из приложений для Apple, но перспективы у него блестящие.

Четвертая версия Swift вышла в 2020 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже не «сырой» язык, а классический представитель верхушки рейтинга TIOBE с планомерным развитием. С помощью Swift вы можете создавать приложения для всех продуктов Apple: macOS, watchOS, iOS и любой новой системы, если она появится.

Посмотрим на код последовательности Фибоначчи:

Более двух десятков лет этот язык находится в списке самых востребованных, а это уже что-то значит. Сегодня он в основном ассоциируется с разработкой приложений для Android — но это лишь малая часть его возможностей. При помощи Java вы можете создавать графические виджеты для веба или писать десктопные приложения — принцип независимости от платформы и устройства в Java живет и процветает.

Кроме того, Java — великолепный язык, чтобы полноценно понять программирование: здесь реализованы все принципы ООП, организована работа с памятью и периферией, можно поупражняться с функциональным программированием.

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:

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

Заключение

К списку можно было бы добавить ряд полезных языков вроде PHP, C++ или Ruby. Или несколько функциональных для общего развития: Lisp, Haskell, Clojure. Впрочем, до этого вы обязательно дойдете. Но сперва выбирайте специализацию, записывайтесь на курсы GeekBrains и осваивайте пять описанных must know языков.

5 книг для начинающих программистов

Полезная подборка, чтобы разобраться в C++, JAVA, Python и узнать про код Грея.

Часто тем, кто всерьёз занимается олимпиадной информатикой, рекомендуют прочесть трёхтомник Дональда Кнута. Кстати, недавно вышел четвёртый том. Но всё же перед тем как взяться за Кнута, советую обратить внимание на книгу Роберта Седжвика «Фундаментальные алгоритмы C++. Анализ. Структуры данных. Сортировка. Поиск».

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

Герберт Шилдт — один из самых опытных авторов книг по изучению языков программирования. Если вы планируете изучать Java, стоит начать именно с этой книги. Шилдт пишет простым языком, последовательно и структурированно.

Время от времени встречаются вставки «вопрос – ответ» — своего рода лайфхаки, чтобы глубже понять прочитанный материал.

Приятным дополнением станут главы о Swing и JavaFX.

Книга подойдёт школьникам и студентам, которые изучают язык с нуля. Материал изложен кратко, без лишних рассуждений и мелких нюансов.Автор разбирает основные структуры данных, принципы объектно-ориентированного программирования и демонстрирует возможности стандартной библиотеки языка. Каждая тема снабжена большим количеством примеров кода.

Эту книгу можно описать так: просто и интересно. Автор рассказывает о программировании на «Пайтоне» понятно даже для младшего школьника. Самоучитель содержит живые примеры и забавные картинки. В конце книги обсуждается разработка двух несложных игр.

Эта удивительная книга построена всего лишь на одной известной задаче про Ханойские башни. Несмотря на это, она содержит главы и про битовую арифметику, и про код Грея. Все примеры приводятся на языке Pascal.


Автор онлайн-курса программирования на Python в Фоксфорде, волонтёр международных workshop для ACM

Автор онлайн-курса разработки игровых приложений под Android на языке JAVA в Фоксфорде, преподаватель в IT-школе Samsung

Стоит ли браться полному новичку за язык Go?

Здравствуйте! Для новичков, которые вообще не программировал ни разу, ни на каких языках, стоит ли браться за язык Go? Я хотел освоить язык Си, но, книга которую я читал неудовлетворил меня, до половины прочёл и заброисил это дело, уж очень сложно там написано. Это Стивен Прат, Язык программирования C. Лекции и упражнения, 5-е издание (2013). И разачарован в языке Си. А теперь немного погуглив, нашёл язык Go, что, мол он тоже почти похож как Си, но только легкий для освоения. Посоветуйте как поступить в моём случае? Цели мои: понять, вообще что такое программирование, и сделать крепкую опору изучив один язык, мог понимать другие языки.

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

Нет. Go хороший язык для корпоративного сектора, но плохой в академическом смысле.

Стивен Прат, Язык программирования C. Лекции и упражнения, 5-е издание (2013)

Если ты новичок, учи максимально востребованные в индустрии языки. Это C++, Java, PHP и Javascript. Конкретный выбор зависит от предпочтений области, в которой хочешь работать.

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

Не стоит брать Golang

Для новичков, которые вообще не программировал ни разу, ни на каких языках, стоит ли браться за язык Go?

Не стоит. Язык подходит только для web’a, и то не совсем. Хайп вокруг него — сильно раздут Google, которая создавала язык для того, чтобы не профильные программисты (программисты python) могли писать сложные системы, не переучиваясь на Java, C++, Erlang, Rust, etc.

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

Берите K&R. Лучшая книга по Си и для начала очень подходит. Всё просто, понятно, без особых сложностей. Хотя простите за вопрос, а зачем вам вообще в программирование? Какие задачи хотите решать?

Это Стивен Прат, Язык программирования C. Лекции и упражнения, 5-е издание (2013).

Хорошая книга. Скорее всего читали просто копипастой примеров, поэтому не поняли.

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

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

Ничем не похож. Он ближе к Python, находится выше на уровне абстракции. Единственные общие вещи — это фигурные скобочки и возможность работы с памятью. Всё, на этом схожесть кончается. И нет, Golang не сможет заменить Pure C. Особенно для понимания работы самого компьютера.

Посоветуйте как поступить в моём случае? Цели мои: понять, вообще что такое программирование, и сделать крепкую опору изучив один язык, мог понимать другие языки.

  • Два раза подумать, правда ли интересно программирование. Быть может это вообще не ваше. Зачем вам эта профессия?
  • Взять K&R, прочитать. Написать что-то простое для себя. К примеру — файловый менеджер или тетрис.
  • Подумать куда идем, — вебота или декстоп.
  • Если выбота
    • Берем HTML, за неделю осваиваем разметку
    • Берем CSS, за вторую неделю осваиваем вёрстку (все это не так глубоко, но для старта хватит).
    • Берем JavaScript — осознаем как работать с DOM на уровне сервера
    • Параллельно — читаем что такое протокол HTTP и зачем о нужен (спецификацию понять можем, ведь мы до этого уже немного изучили Си и азы системного программирования)
    • Берем NodeJS/ES6 (тот же JavaScript, только уже на уровне сервера) + фреймворк вроде Express. Делаем серверную часть. В качестве БД — MongoDB.
    • Берем для frontend какой-нибудь фреймворк. Polymer и React выглядят лучше всего. Если хочется больше строгости — Ember (на самом деле я бы даже советовал его — пересесть на что-то после него очень просто и быстро можно).
    • Опционально повторяем последние два шага для Python3 + Django, Ruby + Rails, PHP + Laravel || Yii.
    • Паралельно с NodeJS разбираем SICP. Язык — Racket.
    • Далее — читаем про нагруженные сервисы и паттерны их построения. С NodeJS можно пересесть на Rust, Erlang или Java/Clojure для таких задач. Хотя и NodeJS хватит.
    • Опционально — изучаем Electron, чтобы писать декстоп приложения на том же стеке.
    • В процессе — читаем умные книги, вроде «Совершенный код», «Жемчужины программирования», «Искусство программирования» и т.п.
  • Если декстоп:
    • Берем учебник Юрова по Assembler, читаем, делаем простые примеры под DOS. Наша задача понять как оно работает на уровне железа.
    • Изучаем паттерны ООП и берем Java (ынтерпрайз и кросплатформ), C# (оффтопик) или С++/Qt (кроссплатформ, больше юниксово).
    • Не верим в то, что на интерпретируемых языках можно написать нормальное приложение для бизнеса. Исключение — платформы вроде Electron или QML, которые изначально заточены под это. Пока веберы начинают зарабатывать на доширак — переходим к написанию простой утилиты. Желательно что-то вроде морды к БД, 100500 файлового менеджера или тетриса.
    • Читаем SICP, изучаем Rust, D. Осознаем почему Golang ушел в веботу.
    • Решаем какая из платформ мамонтов будет нашей — .NET, JVM, Qt. Остальное не нужно практически работодателю. Чаще всего нужно первое.
    • Изучаем Haskell, постигаем дзен ФП. Потом пробуем ФП язык под нашу платформу.
    • Изучаем Racket/Common Lisp — осознаем, что другие языки не нужны. Плачем, что он не применяется практически и дальше идем грызть ынтерпрайзный кактус.
    • Изучаем TCL, осознаем почему продажа ЛСД в промышленных масштабах — это плохо, почему язык не стал популярным и почему кроме TCL вообще больше ничего не нужно. Материмся, что Тк такой страшный.
    • Изучаем Smalltalk и понимаем: а) ООП нигде нормально, кроме него не реализовано; б) плачем что он в рашке не популярен; в) мечтаем работать на нем и продолжаем работать на.
    • Изучаем параллельно книги по паттернам. Перечислены примеры в веботе.

По моему самый лучший выбор для новичка.

Крайне не соглашусь. Для новичка лучше роадмеп с изучение азов. Golang хорош для того, чтобы быстро налабать асинхронный сервер на компилируемом языке, если до этого занимался скриптотой. Так — он травмирует понимание ООП и ФП очень на долго. О системном программировании я вообще молчу.

Недавно сам учил. За 3 часа выучил до базового уровня (Вот сайт), за 2 дня написал многопоточное приложение для собственных нужд(несколько раз гуглил некоторые вещи).

Это плюс для тех кто знает хоть что-то. ТС — нуб.

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

Ключевое — «из которых я учил». Это а ТС вообще ничего не знает по матчасти. Си — тут лучший выбор и от него никуда не уйти.

А почему именно C? По моему это достаточно плохой выбор для начала.

А что лучше для понимания системщины, если не Си? Да и язык простой + служит параметром естественного отбора для тех, кому лучше не быть в профессии.

Когда я учил C, я знал только Pascal, Basic и Assembler, и среди этих 4 языков мне больше pascal понравился(хотя и он не ахти).

Может поэтому и нравится Golang, т.к. он все же ближе к ML, виртовским языкам и алголоподобным, нежели к c-family?

Go подойдет что узнать, что такое програмирование.

Т.е. вы считаете, что надо давать новичку сразу асинхронщину и урезанное представление ООП и ФП?

Помоему сейчас нет ни одного языка, изучив который ты сможешь легко понимать все другие языки. Вожмоно я ошибаюсь, но по моему чтобы понимать другие языки нужно изучить примерно следущий список: Assembler, C, Java, Haskell, Python, Forth, Lisp, JavaScript.

Список плюсую. Согласен. Заметьте, рекомендуемый вами же Golang вы сюда не включили)

Для новичка лучше роадмеп с изучение азов.

Так — он травмирует понимание ООП и ФП очень на долго. О системном программировании я вообще молчу.

Понятно что изучение нужно начинать с азов, именно этим Go и хорош, позволяет изучить азы бел отвлечения на всякие ООП и ФП специфичные вещи. На понимание ООП и ФП уверен изучение Go особо ни как не повлияет, говорю как человек начинавший с изучения Basic на ZX SPectrum, я без проблем понял идеи и ООП и ФП и использовал их на практике в Delphi и Haskell. Насчет системного программирования, возможно ошибаюсь но мне кажется процентов 60 успешных программистов вообще этой темы не касаются, да и к тому же опять на собственном примере, изучение ассемблера и написание программ работающих на голом железе у меня прошло без особых проблем.

Это плюс для тех кто знает хоть что-то. ТС — нуб.

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

Ключевое — «из которых я учил». Это а ТС вообще ничего не знает по матчасти. Си — тут лучший выбор и от него никуда не уйти.

По моему C тут один из худших, но возможных вариантов. Выше вероятность сделать ошибку, нет сборщика мусора. К тому же сами себе противоречите перейти на ООП и ФП с C куда тяжелее, нет ни интерфейсов, ни методов. Да для изучения системного программирования подходит лучше, но системное программирование это вообще ни тема для новичка.

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

А кто вас назначил решателем кому в профессии место, а кому нет? Если именно как специальность — пусть работодатель решает кто ему нужен, профессионал за дорого, или быдлокодер за дешево. Если речь просто о написания программ, то кто вам запрещает не использовать школопрограмки вместо профессиональных решений? Лично я не однократно использовал программы явно написанных дилетантами, но при этом решающих мои задачи куда лучше чем более профессиональные программы. Тут принцип простой не хочешь — не пользуйся.

Может поэтому и нравится Golang, т.к. он все же ближе к ML, виртовским языкам и алголоподобным, нежели к c-family?

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

Т.е. вы считаете, что надо давать новичку сразу асинхронщину

Если ассинхронщина в таком виде как они имеется в Go, то почему нет ? Я Go из-за неё и выучил, она здесь предельно простая и удобная.

и урезанное представление ООП и ФП?


Когда человек захочет перейти на ООП или ФП, ему будет многое уже знакомо и понятно.

Список плюсую. Согласен. Заметьте, рекомендуемый вами же Golang вы сюда не включили)

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

Понятно что изучение нужно начинать с азов, именно этим Go и хорош, позволяет изучить азы бел отвлечения на всякие ООП и ФП специфичные вещи.

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

На понимание ООП и ФП уверен изучение Go особо ни как не повлияет

Еще как. Хотя бы возьмите представление ООП по А.Кею и то подобие, которое есть в Golang. В свое время мой знакомый так по С++ учил ООП, так до сих пор считает, что С++ эталон реализации ООП. И плевать, что Simula — не была полноценным ООП.

говорю как человек начинавший с изучения Basic на ZX SPectrum, я без проблем понял идеи и ООП и ФП и использовал их на практике в Delphi и Haskell.

А сколько перед этим была практика?

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

А потом получаются программы, которые весят 2 гига. Или казусы — вон у меня коллега недавно выдал, что VM для JavaScript нет, а NodeJS исполняется прямо в браузере его. Вся серверная логика. И поэтому не безопасна. Т.к. любой человек может ее посмотреть. А почему? Человек просто не понимает разницы между интерпретацией, компиляцией в натив и компиляцией в байт-код. И то где он исполняется. А это уже системный уровень.

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

А сколько до этого языков было? Когда мне надо было пересесть на Rust я его часов за 12 усвоил на базовом уровне. Но это не значит, что «ржавчина» простая. Скорее просто то, что я с подобными языками уже сталкивался.

По моему C тут один из худших, но возможных вариантов. Выше вероятность сделать ошибку, нет сборщика мусора.

Все это скорее плюсы. Человек поймет как работет память и сделает ошибки эникея.

К тому же сами себе противоречите перейти на ООП и ФП с C куда тяжелее, нет ни интерфейсов, ни методов.

Нисколько. В Pure C нет ни ФП, ни ООП. Поэтому извратить понимание этих парадигм он не может.

Да для изучения системного программирования подходит лучше, но системное программирование это вообще ни тема для новичка.

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

А кто вас назначил решателем кому в профессии место, а кому нет?

Меня — никто. А вот возможность освоить сложный инструмент — показатель. Не можешь освоить — лучше занимайся чем-нибудь другим. Где вреда не будет. Не можешь выучить Pure C — нечего делать в программистах.

Если именно как специальность — пусть работодатель решает кто ему нужен, профессионал за дорого, или быдлокодер за дешево.

А потом после быдлокодера поддерживать код. И дописывать. И рефакторить. А все почему? Потому что работадатель думал, что нанимает джуна, который способен учиться. А не племенного быдлокодера, который на все изобретает костыли и велосипеды.

Если речь просто о написания программ, то кто вам запрещает не использовать школопрограмки вместо профессиональных решений?

Человек решил попробовать программирование, явно не в качестве увлечения. Для школопрограм хватит и Lazarus.

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

Если не секрет — по каким? Всегда было интересно чем мотивируются люди выбирая Golang и Python вместо нормальных языков программирования.

Если ассинхронщина в таком виде как они имеется в Go, то почему нет ? Я Go из-за неё и выучил, она здесь предельно простая и удобная.

Спрошу просто — зачем Golang, если есть Erlang и Elixir? + простота не всегда хорошо. Она не стимулирует разбираться в матчасти.

Когда человек захочет перейти на ООП или ФП, ему будет многое уже знакомо и понятно.

Сравните подобие ООП Golang и то, что описывал А.Кей. Где легче то будет? По ФП — аналогично. Не вижу чем будет от Golang легче в том же хацкеле, если не монадами во все места.

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

А я бы сказал — что он отвратительная комбинация из нормальных идей. Хуже только Python. Нет, я не спорю — языки можно применять для достижения бизнес-целей. Но учить по ним. обрекать человека на быдлокод изначально.

Мастер Йода рекомендует:  Векторная графика где, как и зачем использовать

20 самых рекомендуемых книг для программистов на русском языке

Авторы проекта Dev-Books проанализировали миллионы вопросов и ответов в крупнейшем сообществе программистов Stack Overflow. Всё для того, чтобы найти книги, на которые чаще всего ссылаются разработчики.

В общий список вошло 5 720 книг. Ниже вы найдёте 20 самых упоминаемых из них, которые когда-либо выходили на русском.

По просьбе Лайфхакера своими мнениями насчёт некоторых изданий поделились отечественные эксперты.

1. «Эффективная работа с унаследованным кодом», Майкл К. Физерс

Автор объясняет, как быстро разбираться в унаследованном коде, как тестировать его, как правильно вносить изменения. Книга содержит множество эффективных приёмов, предназначенных специально для этих задач.

2. «Приёмы объектно-ориентированного проектирования. Паттерны проектирования», Эрих Гамма и другие

Классика для программиста. Первая книга, посвящённая именно шаблонам.

Леонид Выговский, системный архитектор IT-компании LiveTex

— Издание уже 20 лет переиздаётся в изначальном виде. В этом, конечно, главный недостаток книги: некоторые шаблоны уже неактуальны. Думаю, её полезно читать уже после других, более современных, книг по паттернам проектирования. Тем более что она написана сухим академическим языком. Для понимания паттернов эта книга не must read, но её прочтение добавляет крутости в глазах коллег-программистов. 🙂 Начинать я советую с «Паттернов проектирования» (Head First Design Patterns).

3. «Чистый код. Создание, анализ и рефакторинг», Роберт К. Мартин

Интересная, но во многом спорная книга о том, как писать понятный и поддерживаемый код.

Леонид Выговский, системный архитектор IT-компании LiveTex

— Почему спорная? Книг про написание кода уже огромное количество, и часть приёмов являются общепризнанными. Но каждый автор добавляет что-то своё. Лично для меня мнение Боба Мартина кажется иногда странным и противоречащим другим источникам. Не must read, но прочитать всё же стоит. Качество кода после прочтения становится лучше.

4. «Предметно-ориентированное проектирование», Эрик Эванс

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

Леонид Выговский, системный архитектор IT-компании LiveTex

— Из этой книги выросли концепции СQRS, BDD, onion-architecture и много других интересных идей. Единственный недостаток: книга насквозь теоретическая. Практическую пользу она приобрела только с выходом книги Вона Вернона «Реализация методов предметно-ориентированного проектирования» (Implementing Domain Driven Design). Поэтому читать их надо последовательно, сразу друг за другом.

5. «JavaScript: сильные стороны», Дуглас Крокфорд

Обязательная книга для веб-разработчиков. В ней Дуглас Крокфорд рассказывает о преимуществах языка JavaScript и учит грамотно их применять для создания эффективного кода.

6. «Шаблоны корпоративных приложений», Мартин Фаулер и другие

Книга описывает базовые принципы проектирования ПО для корпоративных платформ.

7. «Совершенный код. Мастер-класс», Стив Макконнелл

Классическая книга о том, как писать код лучше.


Михаил Осотов, директор по производству «Центра высоких технологий»

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

8. «Рефакторинг. Улучшение существующего кода», Мартин Фаулер и другие

Из серии книг по написанию понятного и качественного кода, «Рефакторинг» — лучшая.

Леонид Выговский, системный архитектор IT-компании LiveTex

Выговский: «Она не только показывает хороший код, но и на примере плохого объясняет, чем именно он плох. Эта книга — must read для всех. Причём чем раньше вы её прочтёте, тем лучше. Качество кода после прочтения сильно вырастет».

Если книгу Фаулера вы уже прочли, обратите внимание на «Рефакторинг с использованием шаблонов» (Refactoring to Patterns) Джошуа Кериевски, которую рекомендует Михаил Осотов.

«Рефакторинг с использованием шаблонов» Кериевски — отличная книга для тех, кто каждый день сталкивается с проблемой легаси-кода и технического долга в своих проектах.

Михаил Осотов, директор по производству «Центра высоких технологий»

— Эта книга поможет сохранить свои нервы, подружиться с рефакторингом и сделать код лучше.

9. «Паттерны проектирования», Эрик Фримен, Элизабет Фримен и другие

Серия Head First, на мой взгляд, идеально подходит для новичков в области разработки ПО.

Михаил Осотов, директор по производству «Центра высоких технологий»

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

10. «Язык программирования C», Брайан У. Керниган, Деннис М. Ритчи

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

11. «Эффективное использование С++. 55 верных способов улучшить структуру и код ваших программ», Скотт Майерс

Книга содержит советы по проектированию программ, работе с шаблонами и управлению ресурсами, а также другие рекомендации по созданию качественного ПО на языке С++.

12. «Экстремальное программирование: разработка через тестирование», Кент Бек

Автор на примерах описывает методику разработки ПО, которая предполагает тестирование программ ещё до написания их кода.

13. «Алгоритмы. Построение и анализ», Томас Х. Кормен и другие

Эту книгу называют библией алгоритмов. Она зарекомендовала себя как отличное научное пособие для студентов технических вузов и всех, кто интересуется информатикой. Книга доступным языком знакомит с алгоритмами разных типов и описывает их особенности.

14. «Регулярные выражения», Джеффри Фридл

Издание об эффективной работе с текстом в Perl, PHP, Java, Python, Ruby и других языках программирования.

15. «CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#», Джеффри Рихтер

Классический учебник по разработке приложений для платформы Microsoft, в том числе с помощью Silverlight, Windows Presentation Foundation, ASP.NET и прочих технологий компании.

16. «Современное проектирование на C++», Андрей Александреску

Книга для опытных программистов на C++. Автор предлагает новый подход к разработке, сочетающий метапрограммирование шаблонов, обобщённое программирование и объектно-ориентированное программирование на этом языке.

17. «Microsoft ASP.NET 2.0. Базовый курс», Дино Эспозито

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

18. «Шаблоны тестирования xUnit. Рефакторинг кода тестов», Джерард Месарош

Автор книги показывает, как применять шаблоны проектирования, исключение повторений, инкапсуляцию и другие принципы разработки ПО к написанию кода тестов.

19. «Компиляторы. Принципы, технологии и инструментарий», Альфред В. Ахо и другие

Книга описывает базовые принципы разработки компиляторов и делает особый акцент на оптимизации кода. В помощь читателю — большое количество примеров из практики.

20. «Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET», Кржиштоф Цвалина, Брэд Абрамс

Издание содержит лучшие приёмы разработки библиотек для платформы Microsoft .NET Framework. Книга должна упростить работу любого .NET-специалиста, который пишет код для других разработчиков.

Полный рейтинг англоязычных книг доступен на сайте Dev-Books. Там же можно просмотреть списки самых популярных книг на определённые темы, будь то Java, Database Design или CSS.

Закончил адаптацию книги-документации по языку Golang 🙂

Что такое Golang?
Go — это активно разрабатываемый и свободно распространяемый язык программирования, изначально созданный одним из создателей Unix (Rob Pike). Киллфича Go заключается в его убойной простоте. Код на Go легко читать и писать, бинарники только и только собраны статически и легко подвергаются горизонтальному масштабированию. Go безумно быстро компилируется.

Кто уже использует Go?
Google: завлечение восторженных хомячков
Twitch: чаты, сбор статистики
Dropbox: практически все высоконагруженные сервисы
CloudFlare: Railgun, сетевые утилиты
Heroku: Doozer
SoundCloud: нагруженный бэкенд

А так же в разнообразных проектах Go используют такие компании, как Baidu, DigitalOcean, Disqus, Docker, GitHub, New York Times, Parse, Square, Tumblr, Twitter, и другие.

Какая у этого языка область применения?
Основная область применения Go — эксперименты под кроватью, домашние сервера и администрирование локалхостов. Тем не менее, это не мешает использовать Go и для других задач: киллфичей Go вовсе не является его производительность, а эффективность на большой кодбазе. Как известно, нагрузка приходит очень быстро и незаметно. Если у тебя, как стартапера, нет желания докупать все больше и больше серверов под кровать, чтобы твои толстые апплеты на Java могли работать под нагрузкой, то Go тебе однозначно понравится.

5 книг для начинающих программистов

Полезная подборка, чтобы разобраться в C++, JAVA, Python и узнать про код Грея.

Часто тем, кто всерьёз занимается олимпиадной информатикой, рекомендуют прочесть трёхтомник Дональда Кнута. Кстати, недавно вышел четвёртый том. Но всё же перед тем как взяться за Кнута, советую обратить внимание на книгу Роберта Седжвика «Фундаментальные алгоритмы C++. Анализ. Структуры данных. Сортировка. Поиск».

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

Мастер Йода рекомендует:  Востребованные хаки цикла WordPress

Герберт Шилдт — один из самых опытных авторов книг по изучению языков программирования. Если вы планируете изучать Java, стоит начать именно с этой книги. Шилдт пишет простым языком, последовательно и структурированно.

Время от времени встречаются вставки «вопрос – ответ» — своего рода лайфхаки, чтобы глубже понять прочитанный материал.

Приятным дополнением станут главы о Swing и JavaFX.

Книга подойдёт школьникам и студентам, которые изучают язык с нуля. Материал изложен кратко, без лишних рассуждений и мелких нюансов.Автор разбирает основные структуры данных, принципы объектно-ориентированного программирования и демонстрирует возможности стандартной библиотеки языка. Каждая тема снабжена большим количеством примеров кода.

Эту книгу можно описать так: просто и интересно. Автор рассказывает о программировании на «Пайтоне» понятно даже для младшего школьника. Самоучитель содержит живые примеры и забавные картинки. В конце книги обсуждается разработка двух несложных игр.

Эта удивительная книга построена всего лишь на одной известной задаче про Ханойские башни. Несмотря на это, она содержит главы и про битовую арифметику, и про код Грея. Все примеры приводятся на языке Pascal.

Автор онлайн-курса программирования на Python в Фоксфорде, волонтёр международных workshop для ACM

Автор онлайн-курса разработки игровых приложений под Android на языке JAVA в Фоксфорде, преподаватель в IT-школе Samsung

Язык программирования Go. Руководство 2020

Скачать книгу

О книге «Язык программирования Go. Руководство 2020»

Go – это язык программирования нового поколения, разрабатываемый в недрах Google изначально для собственных нужд, а ныне поддерживаемый OpenSource-сообществом. Совмещая простоту и мощность, Go вполне способен заменить С/С++ и JavaScript, как бы это странно ни звучало. На западе Go уже давно вошёл в оборот, тогда как родные пенаты только приоткрывают двери для голубого суслика. Полный русскоязычный справочник по различным библиотекам и «статейник» по Go вскоре будет доступен на glinnet.org. Вырученные от продаж средства полностью пойдут на поддержку и развитие сайта.

Произведение относится к жанру Руководства. Оно было опубликовано в 2020 году издательством Accent Graphics communications. На нашем сайте можно скачать книгу «Язык программирования Go. Руководство 2020» в формате fb2, rtf, epub, pdf, txt или читать онлайн. Здесь так же можно перед прочтением обратиться к отзывам читателей, уже знакомых с книгой, и узнать их мнение. В интернет-магазине нашего партнера вы можете купить и прочитать книгу в бумажном варианте.

Roman Dolgopolov


Про разработку и программирование

Маленькая книга о Go

Маленькая книга о Go – Глава 1: Основы

Go компилируемый язык со статической типизацией. Он имеет C-подобный синтаксис и сборку мусора. Что это означает?

Компиляция

Компиляция это процесс перевода исходного кода, который написали вы, в язык более низкого уровня – либо ассемблер (как в случае с Go), либо в какой-то другой промежуточный язык (как в случае с Java или C#).

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

Компилируемые языки, как правило, работают быстрее, и их исполняемые файлы могут быть выполнены без установки дополнительных зависимостей (по крайней мере это верно для таких языков, как C, C++ и Go, которые компилируются непосредственно в ассемблер).

Статическая типизация

Статическая типизация означает, что все переменные должны быть определенного типа (int, string, bool, []byte, и т. д.). Это достигается либо путем указания типа при объявлении переменной, либо, во многих случаях, тип определяет компилятор (мы скоро увидим примеры).

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

C-подобный синтаксис

Говоря о том, что язык имеет C-подобный синтаксис, имеется ввиду то, что если вы уже использовали любой другой C-подобный язык как C, C++, Java, JavaScript и C#, то Go вам покажется похожим – по крайней мере на первый взгляд. Например, это значит, что && используется как логическое И, == применяется для сравнения, < и >обозначает начало и конец области видимости, а индексы массивов начинаются с 0.

C-подобный синтаксис также имеет тенденцию к постановке точки с запятой в окончании строк и использовании скобок вокруг условий. В Go нет ни того, ни другого, хотя скобки все еще используются для разделения приоритета. Например, оператор if выглядит так:

Но в более сложных случаях скобки все еще полезны:

Помимо этого, Go гораздо ближе к C, чем к C# или Java — не только с точки зрения синтаксиса, но и с точки зрения назначения. Это отражается в лаконичности и простоте языка, которая, надеюсь, будет очевидной, как только вы начнете изучать его.

Сборка мусора

Некоторые переменные при создании имеют легко определяемую жизнь. Локальная переменная функции, например, исчезает при выходе из функции. В других случаях это не так очевидно, по крайней мере для компилятора. Например, жизнь переменной, которая была возвращена функцией или на которую ссылаются другие переменные и объекты, бывает сложно определить. Без сборки мусора задачей разработчика являлась очистка памяти от переменных там, где по их мнению они не нужны. Как? В C, вы выполняли free(str); для переменной.

Языки со сборщиками мусора (такие, как Ruby, Python, Java, JavaScript, C#, Go) способны отслеживать и освобождать переменные. которые больше не используются. Сборка мусора добавляет свои накладные расходы, но также устраняет ряд разрушительных ошибок.

Запуск Go кода

Давайте начнем наше путешествие созданием простой программы и научимся её компилировать и выполнять. Откройте ваш любимый текстовый редактор и наберите следующий код:

Сохраните файл с именем main.go . Сейчас, вы можете сохранить его где угодно; не обязательно использовать рабочее пространство Go для тривиальных примеров.

Затем откройте оболочку/командную строку и перейдите в папку, в которую вы сохранили файл. Мне для этого нужно было набрать cd

Наконец, запустите программу, введя:

Если все работает, вы должны увидеть it’s over 9000!.

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

Чтобы явно скомпилировать код, используйте go build :

Эта команда создаст исполняемый файл main который вы сможете запустить. В Linux / OSX не забудьте, что перед именем выполняемого файла нужно набрать точку и слэш: ./main .

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

Надеюсь код, который мы только что выполнили, был понятен. Мы создали функцию и напечатали строку с помощью встроенной функции Println . Команда go run знала что выполнять потому, что у нее не было выбора? Нет, в Go точкой входа в программу является функция с именем main в пакете main .

Мы поговорим о пакетах в позже. Сейчас, когда вы сфокусированы на понимании основ Go, мы всегда будем писать наш код в пакете main .

Если хотите, вы можете отредактировать код и изменить имя пакета. Запустите код с помощью команды go run и вы получите ошибку. Затем измените имя обратно на main , но используйте другое имя функции. Вы должны увидеть другое сообщение об ошибке. Попробуйте сделать тоже самое используя команду go build . Обратите внимание на то, что код компилируется, но в нем нет точки входа чтобы запустить его. Это совершенно нормально когда вы, к примеру, создаете библиотеку.

Импорты

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

Давайте изменим нашу программу:

И запустим её с помощью команды:

Здесь мы используем два стандартных пакета Go: fmt и os . Мы также можем увидеть другую встроенную функцию len . len возвращает длину строки, или число значений в словаре, или, как мы видим здесь, число элементов в массиве. Если вам интересно, почему мы ожидаем два аргумента, это потому, что первый аргумент имеет индекс 0 – это всегда путь к текущему исполняемому файлу. (Изменить программу чтобы вывести его и убедитесь сами.)

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

Go строго относится к импорту пакетов. Программа не будет скомпилирована, если вы импортируете пакет и не используете его. Попробуйте выполнить:

Вы должны получить две ошибки о том, что fmt и os были импортированы и не использованы. Раздражает ли это? Безусловно. Со временем вы привыкните к этому (хотя это всё равно будет раздражать). Go строг в этом плане потому, что неиспользуемые пакеты замедляют компиляцию; правда у большинства из нас не возникает проблем с этим.

Еще одна вещь, которую хотелось бы отметить, это то, что стандартная библиотека Go хорошо документирована. Вы можете взглянуть на http://golang.org/pkg/fmt/#Println чтобы узнать больше о функции Println , которую мы использовали. Можно кликнуть на заголовок и увидеть её исходный код. Также, промотайте вверх страницы, чтобы узнать больше о возможностях форматирования Go.

Если у вас нет доступа к Интернету, можно посмотреть документацию локально, выполнив команду:

И ввести в браузере адрес http://localhost:6060

Переменные и определения

Было бы неплохо начать и закончить обзор переменных просто сказав: вы можете объявить переменную и задать её значение с помощью x = 4. К сожалению в Go все сложнее. Начнем наш разговор глядя на простые примеры. Затем, в следующей главе, познакомимся с ними более подробно рассматривая создание и использование структур. Тем не менее, полное понимание, возможно, займет некоторое время.

Вы можете подумать Ого! Что тут может быть сложного? Давайте посмотрим на несколько примеров.

Наиболее явный способ использования переменных в Go также наиболее подробный:

Здесь мы определяем переменную power типа int . По умолчанию, Go присваивает переменным нулевые значения. Для целых чисел это 0 , для булевых false , для строк «» и так далее. Затем, мы задаем значение 9000 для переменной power . Две строки кода можно объединить в одну:

Все еще много печатать. В Go есть короткий оператор объявления переменных := , с которым можно объявить тип так:

Это удобно и работает и точно также с функциями:

Важно помнить, что := используется для объявления переменной, а так же задания ей значения. Почему? Потому, что переменную нельзя объявить дважды (по крайней мере в той же области видимости). Если вы попытаетесь выполнить следующее, вы получите ошибку.

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

Если вы читали сообщение об ошибке внимательно, вы могли заметить, что слово переменные во множественном числе. Это потому, что Go позволяет присваивать несколько значений переменным (использванием = или := ):

До тех пор пока переменная является новой, можно использовать := . Рассмотрим пример:

Хотя power используется дважды с помощью := , компилятор не будет жаловаться когда мы будем использовать эту переменную второй раз, он видит что другая переменная name новая и разрешает использовать := . Однако, вы не можете изменить тип переменой power . Она была объявлена (косвенным образом) как целое число и может принимать только целочисленные значения.

Теперь, последнее что нужно знать, это то, что Go, как и в случае с импортами, не позволяет иметь в программе неиспользуемые переменные. Например,

не будет скомпилировано потому, что name была объявлена, но не используется. Как и неиспользуемые импорты это будет причинять одни расстройства, но в целом, я думаю, это улучшает чистоту кода и его читаемость.

Еще многое предстоит узнать об объявлениях и присваиваниях. А пока запомните, что когда используется var ИМЯ ТИП переменная объявляется с нулевым значением, ИМЯ := ЗНАЧЕНИЕ значение присваивается одновременно с объявлением переменной, а ИМЯ = ЗНАЧЕНИЕ когда присваивается значение уже объявленной переменной.

Объявление функций

Настало время рассказать о том, что функции могут возвращать несколько значений. Возьмем три функции: одна не возвращает значение, другая возвращает одно значение, и третья возвращает два значения.

Последнюю можно использовать так:

Иногда нужно только одно из возвращаемых значений. В этом случае другое значение присваивают переменной _ :

Это больше, чем просто договорённость. _ – пустой идентификатор, его особенность в том, что возвращаемое значение в действительности не присваивается. Это позволяет вам использовать _ снова и снова не зависимо от возвращаемого типа переменной.

И наконец еще кое-что, с чем вы наверняка столкнетесь при объявлении функций. Если параметры имеют одинаковый тип, можно использовать короткий синтаксис:

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

Перед тем, как продолжить

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

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

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

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