Разное

Что такое гоу: ГОУ — это… Что такое ГОУ?

Содержание

ГОУ — это… Что такое ГОУ?

  • ГОУ — главное оперативное управление Генштаба ВС СССР СССР Словарь: Словарь сокращений и аббревиатур армии и спецслужб. Сост. А. А. Щелоков. М.: ООО «Издательство АСТ», ЗАО «Издательский дом Гелеос», 2003. 318 с. ГОУ губернский отдел управления истор.… …   Словарь сокращений и аббревиатур

  • Гоу — Гоу: ГОУ  государственное образовательное учреждение. Фамилия: Гоу  китайская фамилия. Гоу, Уильям  английский государственный и военный деятель. Крюк (кит. упр. 钩, пиньинь: gōu): Шуангоу Фэйгоу …   Википедия

  • гоу — нареч, кол во синонимов: 8 • айда (22) • вперед (60) • идем (14) • летс г …   Словарь синонимов

  • гоу-ин — неизм. ср. Тактика протеста без применения силы; ненасильственное сопротивление путём проникновния в церкви, в аудитории колледжей и университетов, в залы парламентов и т.п. с целью призвать к обсуждению насущных проблем, обратить на них внимание …   Современный толковый словарь русского языка Ефремовой

  • ГОУ-ИН — [англ. go in входить, вступать] тактика протеста без применения силы: массовое проникновение протестующих в аудитории учебных заведений, церкви, на заседания в парламент и т. д., с тем чтобы принудить к дискуссии недосягаемых лиц либо коллективы… …   Словарь иностранных слов русского языка

  • Гоу — ГОУ. См. Хоу1. [1] Материал словаря, содержащий информацию, на которую указывает эта ссылка, опубликован не был …   Военная энциклопедия

  • ГОУ ГШ — Главное оперативное управление Генерального штаба …   Словарь сокращений и аббревиатур

  • гоу — (кит. крюк) Кронштейн або консоль, що застосовувались у традиційній архітектурі країн Далекого Сходу (порівн. доу гун) …   Архітектура і монументальне мистецтво

  • ГОУ — китайский короткий клевец …   Энциклопедия вооружений

  • ГОУ-МАН — Чжун, в древнекитайской мифологии помощник правителя Востока Фу си. В древнем географическом трактате «Шань хай цзин» («Книга гор и морей», 3 2 вв. до н. э.) сказано: «На Востоке Г. м. с телом птицы и лицом человека восседает на двух драконах».… …   Энциклопедия мифологии

  • ГОУ — это… Что такое ГОУ?

  • Гоу — Гоу: ГОУ  государственное образовательное учреждение. Фамилия: Гоу  китайская фамилия. Гоу, Уильям  английский государственный и военный деятель. Крюк (кит. упр. 钩, пиньинь: gōu): Шуангоу Фэйгоу …   Википедия

  • гоу — нареч, кол во синонимов: 8 • айда (22) • вперед (60) • идем (14) • летс г …   Словарь синонимов

  • гоу-ин — неизм. ср. Тактика протеста без применения силы; ненасильственное сопротивление путём проникновния в церкви, в аудитории колледжей и университетов, в залы парламентов и т.п. с целью призвать к обсуждению насущных проблем, обратить на них внимание …   Современный толковый словарь русского языка Ефремовой

  • ГОУ-ИН — [англ. go in входить, вступать] тактика протеста без применения силы: массовое проникновение протестующих в аудитории учебных заведений, церкви, на заседания в парламент и т. д., с тем чтобы принудить к дискуссии недосягаемых лиц либо коллективы… …   Словарь иностранных слов русского языка

  • Гоу — ГОУ. См. Хоу1. [1] Материал словаря, содержащий информацию, на которую указывает эта ссылка, опубликован не был …   Военная энциклопедия

  • ГОУ ГШ — Главное оперативное управление Генерального штаба …   Словарь сокращений и аббревиатур

  • гоу — (кит. крюк) Кронштейн або консоль, що застосовувались у традиційній архітектурі країн Далекого Сходу (порівн. доу гун) …   Архітектура і монументальне мистецтво

  • ГОУ — китайский короткий клевец …   Энциклопедия вооружений

  • ГОУ — газоочистительное устройство …   Словарь сокращений русского языка

  • ГОУ-МАН — Чжун, в древнекитайской мифологии помощник правителя Востока Фу си. В древнем географическом трактате «Шань хай цзин» («Книга гор и морей», 3 2 вв. до н. э.) сказано: «На Востоке Г. м. с телом птицы и лицом человека восседает на двух драконах».… …   Энциклопедия мифологии

  • Кому и зачем все-таки нужен Go? / Хабр

    Здарова! Короче, последнее время на хабре было много срачей вокруг Go: хороший-плохой, нужен-ненужен, много сравнивали с питоном, много сравнивали с растом, divan0 даже додумался перевести высер «Go vs Haskell» ну и в таком ключе. У меня сложилось ощущение, что из-за хайпа и агрессивного маркетинга языка некоторыми Иванами Данилюками очень мало кто понял, кому и зачем вообще Go может пригодиться, зачем его делали и стоит ли вообще его учить. Я тоже долгое время участвовал в этих срачах, принимая посменно сторону «фанов» языка и сторону оппозиции, но в конце-концов допер, в чем фокус. Сегодня немного потупил у дивана в посте и решил написать вот эту заметочку.

    Давайте, пацаны, проходим в пост.

    Кому нужен Go?

    Я только сегодня понял, что почти никто толком-то и не понимает, зачем вообще Go нужен. Если коротко, то Go нужен для того, чтобы проектировать robust software. Я не знаю, как правильно перевести это слово на русский, но это скорее всего что-то вроде «надежный». Так вот, Go сделали, потому что гуглу нужен был инструмент для написания надежного кода. На самом деле не сколько гуглу, сколько Робу Пайку, который последние две декады, как минумум, одержим идеей сделать сишку с каналами и зелеными потоками. Так получилось, что Роб Пайк попал в нормальную компашку с другими штрихами из Bell Labs, крутейшим Russ Cox, Фицпатриком и т.д. Этим ребятам несложно было убедить гугл, что им нужен новый язык и вобщем-то, бабосики они на него выбили.

    Так, это было небольшое лирическое отступление, давайте вернемся к теме. Да, зачем же все-таки гуглу был нужен новый язык? Ну, тут все понятно, давайте послушаем слова самого Роба Пайка:

    Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут.

    А теперь давайте попытаемся понять, что же он имел ввиду. Если грубо говоря, то он сказал, что в гугле работают не самые умные ребята («не способные понимать крутой язык»), так что они придумали такой язык, который просто невозможно не понять. Это на самом деле очень круто для менеджмента. Посудите: можно нанять 100 посредственных программистов, дать им в руки Go и эта армия обезьян будет генерить вам много «неплохого» и очень даже поддерживаемого кода! Go это фантастический инструмент для менеджмента, лучше не придумать: моментально загоняем всех программистов в рамки go-fmt (никто не сможет пропихнуть свой стиль форматирования), забираем у них любые абстракции сложнее интерфейса и получается такой конвеер кода, в котором developer is just another brick in the wall. По-моему, очень круто! Ну, программистам скорее всего такой расклад не очень понравится — мало кто любит быть винтиком в системе.

    Так вот, Go нужен корпорациям. Если у вас в компании работает много людей, большие проекты и все такое, то Go это идеальный вариант! Но для того, чтобы понять, действительно ли вам нужен Go, надо разобраться ЗАЧЕМ его все-таки стоит использовать. Давайте узнаем.

    Зачем нужен Go?

    С технической стороны, ниша у Go довольно скромная: сеть, утилиты, бэкенды. Если у вас сложные сети или много нод, которые надо как-то навороченным образом оркестрировать, то Go это хороший выбор (судя по опыту CloudFlare). Если вы хотите сделать какую-то классную консольную утилиту, вроде докера или консула, то Go тоже нормульок подойдет (судя по опыту оных). Я вот сейчас тоже делаю интересную утилиту и пишу ее на Go, потому что вписывается. Ну и в конце-концов. Если вам нужен быстрый и в принципе, эффективный бэкенд, то тоже можно выбрать Go. Я не представляю, как народ пишет бизнес-логику на Go, но как-то пишут же! Короче, тут все довольно сложно. С одной стороны, делать CRUD в Go это достаточно болезненно, с другой стороны есть 350 разных роутеров и фреймворков, которые здорово облегчают работу.

    Что касается других ниш, то я с уверенностью могу вас заверить: полная профанация. Если Go где-то всерьез и используется, то в консольных утилитах, на сетях и бэкендах. Больше юскейсов нет. И давайте не будем их выдумывать. Go изначально язык, который сделали в гугле, чтобы студенты могли придти и писать код для навороченной сетевой инфраструктуры гугла. Тут можно сформировать своеобразный rule of thumb: «Если ты не пишешь софт для сети, консольную утилиту или хайлоад бэкенд, то Go тебе скорее всего не нужен«. Тем не менее, полно народу продолжает писать софт на Go ради собственно говоря, самого Go.

    Cтоит ли учить Go?

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

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

    Для тех, кто прямо не могут сдерживаться и УЖЕ выпригивают из трусов, сразу кидаю несколько ссылок на материалы:

    • tour.golang.org — оф. тур по языку, разжевывают
    • gobyexample.com — примеры разных частоиспользуемых сниппетов
    • www.reddit.com/r/golang — сабреддит, посвященный Go; там часто классные вещи постят

    Дерзайте, Go вам точно не навредит. Ну может будете потом скучать по gofmt, но это не очень страшно на самом деле.

    Заключение

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

    Спасибо за твое внимание,

    Илья.

    Чем хорош язык Go и зачем его изучать? Все плюшки Golang

    Язык Go – серверный язык будущего. В этой статье мы не будем разбирать «Hello World!», но затронем важность Golang и его характеристики.

    Первый процессор Pentium 4 с тактовой частотой 3,0 ГГц был представлен еще в 2004 году корпорацией Intel. Сегодня Mackbook Pro 2016 имеет тактовую частоту 2,9 ГГц. Таким образом, почти за одно десятилетие мощности не слишком-то изменились. Вы можете увидеть сравнение мощностей на разных этапах на диаграмме ниже.

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

    Для решения этой задачи:

    1. Производители начали добавлять в процессоры все больше и больше ядер. В настоящее время мы имеем четырехъядерные и восьмиядерные процессоры.
    2. Они также ввели гиперпоточность.
    3. Для повышения производительности добавлено больше кэша.

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

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

    Если же нельзя положиться на усовершенствование оборудования, единственный выход – более эффективное ПО для повышения производительности. Но современные языки программирования малоэффективны в данном вопросе.

    «Современные процессоры похожи на нитрозаправленные смешные автомобили. К сожалению, языки программирования сегодня напоминают Монте-Карло: они полны изгибов и поворотов.» © D. Ungar

    Увеличение количества ядер ожидается и в дальнейшем. Более того, сегодняшние приложения используют несколько микросервисов для поддержки соединений с базами данных, MQ (Messages queues) и хранение кэша. Разрабатываемое нами ПО и языки программирования должны поддерживать параллелизм и быть расширяемыми в условиях постоянного увеличения количества ядер.

    Большинство современных языков программирования (таких как Java, Python etc.) поддерживают многопоточность. Но настоящая проблема связана с одновременным исполнением, блокировкой потоков, состоянием гонки и взаимоблокировками. Это затрудняет разработку многопоточного приложения.

    Возьмем, к примеру, Java. Каждый канал потребляет около 1 Мб объема памяти, и, в конце концов, если вы задействуете тысячи потоков, все может закончиться нехваткой памяти. Кроме того, взаимодействие между двумя или несколькими потоками – это тоже непросто.

    Язык Go (он же Golang) появился в 2009 году, когда уже были многоядерные процессоры. Вот почему этот ЯП построен с учетом параллелизма. У Go есть goroutine вместо потоков. Они потребляют только 2 Кб памяти. Таким образом, можно в любой момент активировать миллионы горутин.

    Другие преимущества:

    1. Горутины обладают сегментированными расширяемыми стеками. Другими словами, они используют больше памяти только тогда, когда это необходимо.
    2. Также они запускаются быстрее, чем потоки.
    3. Goroutines идут вместе со встроенными примитивами, чтобы безопасно обмениваться данными.
    4. В условиях одновременного использовании структур данных не придется прибегать к блокировке мьютексов.
    5. 1 горутина может свободно работать на нескольких потоках. Горутины мультиплексируются в небольшое количество потоков ОС.

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

    Все вышеперечисленные моменты делают язык Go мощным инструментом в обработке параллелизма, как в C-языках и Java, но с сохранением естественности и красоты кода, как в Erlang.

    Одним из наиболее значительных преимуществ языков C и C++ над другими современными языками, такими как Java/Python, является их производительность. Дело в том, что C и C++ вместо интерпретации компилируются.

    Процессоры считывают двоичный код. При создании программы на Java или других языках на базе JVM проект компилируется с понятного человеку кода в байтовый код для виртуальной машины поверх базовой ОС. Во время выполнения VM интерпретирует эти байт-коды и преобразует их в двоичные, которые могут понять процессоры.

    В то время как есть языки C/C++, не использующие VM, из-за чего удаляется один шаг из цикла выполнения, что и повышает производительность. Код напрямую компилируется из человечески читаемого кода в двоичный.

    Но освобождение и распределение переменной на таких ЯП – большая проблема. Хотя большинство языков обрабатывают распределение и удаление объектов с использованием сборки мусора или алгоритмов подсчета ссылок.

    Язык Go собрал в себе лучшее из всего. Как и языки нижнего уровня, Go является компилируемым. Это означает, что производительность почти такая же высокая, как и в низкоуровневых языках. А еще он использует сборщик мусора для выделения и удаления объекта. Больше free() и malloc(). То, что нужно!

    Язык Go лишен сумасшедшего синтаксиса. В отличие от других ЯП, в нем предусмотрен очень аккуратный и чистый синтаксис.

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

    Go специально не учитывает многие особенности современных языков ООП:

    1. Нет классов. Все разделяется на пакеты. Go работает со структурами, а не с классами.
    2. Не поддерживает наследование. Это упрощает изменение кода. В языках вроде Java и Python если класс A наследует класс B, и вы вносите изменения в последний, это может вызвать некоторые нежелательные изменения внутри других классов, которые наследуют B. Без наследования Go также становится легко читаемым: нет суперклассов, которые следует изучать особо тщательно.
    3. Нет дженериков.
    4. Нет аннотаций.
    5. Нет конструкторов.
    6. Нет исключений.

    Вышеизложенные изменения делают Golang отличным от других языком, а программирование на Go – предельно простым. Возможно, некоторые перечисленные пункты вам и не понравятся (особенно если вы привыкли работать с типичными языками ООП).

    Но это не значит, что вы не сможете написать свою программу на Go. Все, что нужно сделать, так это добавить дополнительные 2-3 строки кода. Зато на выходе код будет более красивым, чистым и понятным.

    На графике видно, что язык Go примерно так же эффективен, как C/C++, и при этом сохраняет синтаксис кода простым, как Ruby или Python. Это лучший вариант для людей и процессоров.

    В отличие от прочих новых языков, таких как Swift, синтаксис Go стабилен. Он остался прежним с первого выпуска версии 1.0, что состоялся в 2012 году. Это делает его обратно совместимым.

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

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

    Кроме того, язык программирования Go пользуется популярностью в компаниях IBM, Intel, Adobe, Medium и BBC.

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

    • высокую производительность, подобно C и C++;
    • суперэффективную обработку параллелизма, такую ​​как в Java;
    • удовольствие от работы с максимально удобным для разработчика кодом, как и в случае с Python, Perl.

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

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

    Изучаете Go? Поделитесь своим опыт в освоении данного языка.

    Язык Go для начинающих / Хабр

    Цель этой статьи — рассказать о языке программирования Go (Golang) тем разработчикам, которые смотрят в сторону этого языка, но еще не решились взяться за его изучение. Рассказ будет вестись на примере реального приложения, которое представляет из себя RESTful API веб-сервис.


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

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

    Основные преимущества языка Go:

    • Простой и понятный синтаксис. Это делает написание кода приятным занятием.
    • Статическая типизация. Позволяет избежать ошибок, допущенных по невнимательности, упрощает чтение и понимание кода, делает код однозначным.
    • Скорость и компиляция. Скорость у Go в десятки раз быстрее, чем у скриптовых языков, при меньшем потреблении памяти. При этом, компиляция практически мгновенна. Весь проект компилируется в один бинарный файл, без зависимостей. Как говорится, «просто добавь воды». И вам не надо заботиться о памяти, есть сборщик мусора.
    • Отход от ООП. В языке нет классов, но есть структуры данных с методами. Наследование заменяется механизмом встраивания. Существуют интерфейсы, которые не нужно явно имплементировать, а лишь достаточно реализовать методы интерфейса.
    • Параллелизм. Параллельные вычисления в языке делаются просто, изящно и без головной боли. Горутины (что-то типа потоков) легковесны, потребляют мало памяти.
    • Богатая стандартная библиотека. В языке есть все необходимое для веб-разработки и не только. Количество сторонних библиотек постоянно растет. Кроме того, есть возможность использовать библиотеки C и C++.
    • Возможность писать в функциональном стиле. В языке есть замыкания (closures) и анонимные функции. Функции являются объектами первого порядка, их можно передавать в качестве аргументов и использовать в качестве типов данных.
    • Авторитетные отцы-основатели и сильное комьюнити. Роб Пайк, Кен Томпсон, Роберт Гризмер стояли у истоков. Сейчас у языка более 300 контрибьюторов. Язык имеет сильное сообщество и постоянно развивается.
    • Open Source
    • Обаятельный талисман

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

    Итак, вернемся к нашей задаче. Хоть язык и не накладывает ограничений на структуру проекта, данное приложение я решил организовать по модели MVC. Правда View реализовывается на стороне клиента. В моем случае это был AngularJS, в перспективе — нативное мобильное приложение. Здесь я расскажу лишь об API на стороне сервиса.

    Структура проекта получилась следующая:

    /project/
    	/conf/
    		errors.go
    		settings.go
    	/controllers/
    		posts.go
    		users.go
    	/models/
    		posts.go
    		users.go
    	/utils/
    		helpers.go
    	loctalk.go
    

    Программа в Go разделяется на пакеты (package), что указывается в начале каждого файла. Имя пакета должно соответствовать директории в которой находятся файлы, входящие в пакет. Так же, должен быть главный пакет main с функцией main(). Он у меня находится в корневом файле приложения loctalk.go. Таким образом, у меня получилось 5 пакетов: conf, controllers, models, utils, main.

    Буду приводить неполное содержание файлов, а только минимально необходимое для понимания.

    Пакет conf содержит константы и настройки сайта.

    package conf
    
    import (
    	"os"
    )
    
    const (
    	SITE_NAME string = "LocTalk"
    	DEFAULT_LIMIT  int = 10
    	MAX_LIMIT      int = 1000
    	MAX_POST_CHARS int = 1000
    )
    func init() {
    	mode := os.Getenv("MARTINI_ENV")
    
    	switch mode {
    	case "production":
    		SiteUrl = "http://loctalk.net"
    		AbsolutePath = "/path/to/project/"
    	default:
    		SiteUrl = "http://127.0.0.1"
    		AbsolutePath = "/path/to/project/"
    	}
    }
    

    Думаю, комментировать тут нечего. Функция init() вызывается в каждом пакете до вызова main(). Их может быть несколько в разных файлах.

    Пакет main.

    package main
    
    import (
    	"github.com/go-martini/martini"
    	"net/http"
    	"loctalk/conf"
    	"loctalk/controllers"
    	"loctalk/models"
    	"loctalk/utils"
    )
    
    func main() {
    	m := martini.Classic()
    
    	m.Use(func(w http.ResponseWriter) {
    		w.Header().Set("Content-Type", "application/json; charset=utf-8")
    	})
    
    	m.Map(new(utils.MarshUnmarsh))
    
    	Auth := func(mu *utils.MarshUnmarsh, req *http.Request, rw http.ResponseWriter) {
    		reqUserId := req.Header.Get("X-Auth-User")
    		reqToken := req.Header.Get("X-Auth-Token")
    		if !models.CheckToken(reqUserId, reqToken) {
    			rw.WriteHeader(http.StatusUnauthorized)
    			rw.Write(mu.Marshal(conf.ErrUserAccessDenied))
    		}
    	}
    
    	// ROUTES
    	m.Get("/", controllers.Home)
    
    	// users
    	m.Get("/api/v1/users", controllers.GetUsers)
    	m.Get("/api/v1/users/:id", controllers.GetUserById)
    	m.Post("/api/v1/users", controllers.CreateUser)
    	// …
    
    	// posts
    	m.Get("/api/v1/posts", controllers.GetRootPosts)
    	m.Get("/api/v1/posts/:id", controllers.GetPostById)
    	m.Post("/api/v1/posts", Auth, controllers.CreatePost)
    	// ...
    
    	m.Run()
    }
    

    В самом верху определяется имя пакета. Далее идет список импортируемых пакетов. Мы будем использовать пакет Martini. Он добавляет легкую прослойку для быстрого и удобного создания веб-приложений. Обратите внимание как импортируется этот пакет. Нужно указать путь к репозиторию откуда он был взят. А чтобы его получить, достаточно в консоли набрать команду go get github.com/go-martini/martini

    Далее мы создаем экземпляр Martini, настраиваем и запускаем его. Обратите внимание на знак « := ». Это сокращенный синтаксис, он означает: создать переменную соответствующего типа и инициализировать ее. Например, написав a := «hello», мы создадим переменную a типа string и присвоим ей строку «hello».

    Переменная m в нашем случае имеет тип *ClassicMartini, именно это возвращает martini.Classic(). * означает указатель, т. е. передается не само значение, а лишь указатель на него. В метод m.Use() мы передаем функцию-обработчик. Этот Middleware позволяет Martini делать определенные действия над каждым запросом. В данном случае, мы определяем Content-Type для каждого запроса. Метод m.Map() же позволяет привязать нашу структуру и использовать ее затем в контроллерах при необходимости (механизм dependency injection). В данном случае, я создал обертку для кодирования структуры данных в формат json.

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

    Взглянем на файл errors.go пакета conf.

    package conf
    
    import (
    	"fmt"
    	"net/http"
    )
    
    type ApiError struct {
    	Code        int    `json:"errorCode"`
    	HttpCode    int    `json:"-"`
    	Message     string `json:"errorMsg"`
    	Info        string `json:"errorInfo"`
    }
    
    func (e *ApiError) Error() string {
    	return e.Message
    }
    
    func NewApiError(err error) *ApiError {
    	return &ApiError{0, http.StatusInternalServerError, err.Error(), ""}
    }
    
    var ErrUserPassEmpty = &ApiError{110, http.StatusBadRequest, "Password is empty", ""}
    var ErrUserNotFound = &ApiError{123, http.StatusNotFound, "User not found", ""}
    var ErrUserIdEmpty = &ApiError{130, http.StatusBadRequest, "Empty User Id", ""}
    var ErrUserIdWrong = &ApiError{131, http.StatusBadRequest, "Wrong User Id", ""}
    // … и т. д. 
    

    Язык поддерживает возврат нескольких значений. Вместо механизма try-catch, очень часто используется прием, когда вторым аргументом возвращается ошибка. И при ее наличии, она обрабатывается. Есть встроенный тип error, который представляет из себя интерфейс:

    type error interface {
    	Error() string
    }
    

    Таким образом, чтобы реализовать этот интерфейс, достаточно иметь метод Error() string. Я создал свой тип для ошибок ApiError, который более специфичен для моих задач, однако совместим со встроенным типом error.

    Обратите внимание на — type ApiError struct. Это определение структуры, модели данных, которую вы будете использовать постоянно в своей работе. Она состоит из полей определенных типов (надеюсь, вы успели заметить, что тип данных пишется после имени переменной). Кстати, полями могут быть другие структуры, наследуя все методы и поля. В одинарных кавычках « указаны теги. Их указывать не обязательно. В данном случае они используются пакетом encoding/json для указания имени в выводе json (знак минус «-» вообще исключает поле из вывода).

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

    Двигаемся дальше. Определение func (e *ApiError) Error() string означает ни что иное, как метод данной структуры. Переменная e — это указатель на структуру, своего рода self/this. Соответственно вызвав метод .Error() на структуре, мы получим ее поле Message.

    Далее мы определяем предустановленные ошибки и заполняем их поля. Поля вида http.StatusBadRequest — это значения типа int в пакете http для стандартных кодов ответа, своего рода алиасы. Мы используем сокращенный синтаксис объявления структуры &ApiError{} с инициализацией. По другому можно было бы написать так:

    MyError := new(ApiError)
    MyError.Code = 110
    // …
    

    Символ & означает получить указатель на данную структуру. Оператор new() так же возвращает указатель, а не значение. По-началу возникает небольшая путаница с указателями, но, со временем, вы привыкните.

    Перейдем к нашим моделям. Приведу урезанную версию модели постов:

    package models
    
    import (
    	"labix.org/v2/mgo/bson"
    	"loctalk/conf"
    	"loctalk/utils"
    	"time"
    	"unicode/utf8"
    	"log"
    )
    
    // GeoJSON format
    type Geo struct {
    	Type        string     `json:"-"`          
    	Coordinates [2]float64 `json:"coordinates"`
    }
    
    type Post struct {
    	Id         bson.ObjectId `json:"id" bson:"_id,omitempty"`
    	UserId     bson.ObjectId `json:"userId"`
    	UserName   string		 `json:"userName"`
    	ThumbUrl   string		 `json:"thumbUrl"`
    	ParentId   bson.ObjectId `json:"parentId,omitempty" bson:",omitempty"`
    	Enabled    bool          `json:"-"`
    	Body       string        `json:"body"`
    	Geo        Geo           `json:"geo"`
    	Date       time.Time     `json:"date" bson:",omitempty"`
    }
    
    func NewPost() *Post {
    	return new(Post)
    }
    
    func (p *Post) LoadById(id string) *conf.ApiError {
    	if !bson.IsObjectIdHex(id) {
    		return conf.ErrPostIdWrong
    	}
    
    	session := utils.NewDbSession()
    	defer session.Close()
    	c := session.Col("posts")
    	err := c.Find(bson.M{"_id": bson.ObjectIdHex(id), "enabled": true}).One(p)
    	if p.Id == "" {
    		return conf.ErrPostNotFound
    	}
    	if err != nil {
    		return conf.NewApiError(err)
    	}
    	return nil
    }
    
    func (p *Post) Create() (id string, err *conf.ApiError) {
        // validation
        switch {
        case p.UserId == "":
            err = conf.ErrUserIdEmpty
        case p.Body == "":
            err = conf.ErrPostBodyEmpty
        case utf8.RuneCountInString(p.Body) > conf.MAX_POST_CHARS:
            err = conf.ErrPostMaxSize
        case p.Geo.Coordinates[0] == 0.0 || p.Geo.Coordinates[1] == 0.0:
            err = conf.ErrPostLocationEmpty
        }
        if err != nil {
            return
        }
    
        p.Id = bson.NewObjectId()
        p.Geo.Type = "Point"
        p.Enabled = true
        p.Date = time.Now()
    
        session := utils.NewDbSession()
        defer session.Close()
    
        c := session.Col("posts")
        errDb := c.Insert(p)
    
        if errDb != nil {
            return "", conf.NewApiError(errDb)
        }
    
        return p.Id.Hex(), nil
    }
    
    func (p *Post) Update() *conf.ApiError {
    	session := utils.NewDbSession()
    	defer session.Close()
    	c := session.Col("posts")
    	err := c.UpdateId(p.Id, p)
    	if err != nil {
    		return conf.NewApiError(err)
    	}
    	return nil
    }
    
    func (p *Post) Disable() *conf.ApiError {
    	session := utils.NewDbSession()
    	defer session.Close()
    	p.Enabled = false
    	c := session.Col("posts")
    	err := c.UpdateId(p.Id, p)
    	if err != nil {
    		return conf.NewApiError(err)
    	}
    	return nil
    }
    
    // … 
    

    Здесь мы используем замечательный драйвер для MongoDb — mgo, чтобы сохранять данные. Для удобства, я создал небольшую обертку над api mgo — utils.NewDbSession. Логика работы с данными: сначала мы создаем объект во внутренней структуре языка, а затем, с помощью метода этой структуры, сохраняем его в базу данных.

    Обратите внимание, что в этих методах мы везде используем наш тип ошибки conf.ApiError. Стандартные ошибки мы конвертируем в наши с помощью conf.NewApiError(err). Так же, важен оператор defer. Он исполняется в самом конце выполнения метода. В данном случае, закрывает соединение с БД.

    Что ж, осталось взглянуть на контроллер, который обрабатывает запросы и выводит json в ответ.

    package controllers
    
    import (
    	"encoding/json"
    	"fmt"
    	"github.com/go-martini/martini"
    	"labix.org/v2/mgo/bson"
    	"loctalk/conf"
    	"loctalk/models"
    	"loctalk/utils"
    	"net/http"
    )
    func GetPostById(mu *utils.MarshUnmarsh, params martini.Params) (int, []byte) {
    	id := params["id"]
    	post := models.NewPost()
    	err := post.LoadById(id)
    	if err != nil {
    		return err.HttpCode, mu.Marshal(err)
    	}
    	return http.StatusOK, mu.Marshal(post)
    }
    
    // ...
    

    Здесь мы получаем из URL id запрашиваемого поста, создаем новый экземпляр нашей структуры и вызываем на ней метод LoadById(id) для загрузки данных из БД и заполнения данной структуры. Которую мы и выводим в HTTP ответ, предварительно преобразовав в json нашим методом mu.Marshal(post).

    Обратите внимание на сигнатуру функции:

    func GetPostById(mu *utils.MarshUnmarsh, params martini.Params) (int, []byte)
    

    Входные параметры нам предоставляет Martini с помощью механизма внедрения зависимостей (dependency injection). И мы возвращаем два параметра (int, []byte) — число (статус ответа) и массив байт.

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

    Для изучения могу порекомендовать хорошую книгу на русском «Программирование на языке Go» Марка Саммерфильда. И, конечно, больше практиковаться.

    UPD: Tour Go на русском.

    Искусство игры в Го — Мастерок.жж.рф — LiveJournal

    Но компьютеры давно обыгрывают человека в шахматы, шашки и любые другие игры, где отсутствует элемент случайности и все основано на математическом расчете. Почему же го оказалась крепким орешком? Как ни бились программисты, мастера много лет выигрывали у любых программ. Потому что го — это искусство утверждают на  popmech.ru

    Узнав, что кто-то играет в го, люди реагируют одинаково: «Что это за камешки? То ли дело шахматы или шашки!». Немногие понимают суть узоров, которые игроки выкладывают из камней — со стороны система игры выглядит чудовищно запутанной. При этом го — одна из самых распространенных настольных игр в мире. Завоевывает она свое место и в России — на последний мос­ков­ский турнир съехалось более 150 участников. Го намного старше шахмат и тоже возникло в Азии, но где именно, неясно: за четыре тысячи лет сменились десятки цивилизаций, расцвели и рухнули могучие империи, произошли грандиозные переселения народов, и след теряется на границе Китая, Индии и Тибета. Тем не менее шахматы значительно популярнее, и в связи с этим возникает вопрос — почему? Чем привлекает го и чем отталкивает?

    Го — игра захвата. Игроки делят доску с помощью камней, а главная ценность — территория, пустые пункты (перекрестья линий на доске), которые игрок себе огородил. За ход игрок или выставляет один камень в любой незанятый пункт, или пасует. Первый ход делают черные, это дает преимущество, и, чтобы выравнять баланс, в XIX веке ввели правило «коми»: перед началом игры белые получают компенсацию в 6,5 очка. Поэтому в го не бывает ничьих — за все действия в игре дается только целое количество очков, и 0,5 очка всегда будут служить средством перевеса.

    Приемы игры относительно просты: окружай, строй крепости, дели пространство. Камни ставятся на перекрестья, каждое в свою очередь граничит с четырьмя свободными перекрестками (на краю доски — с тремя, в углу — с двумя), которые называются «дамэ» (дыхание). Пока у камня или группы есть контакт хотя бы с одним дамэ, они «живут», но если все перекрыто камнями противника, они снимаются с доски. Ставить камень в пункт, у которого нет дамэ, запрещено, такой ход разрешается, только если выставленный камень забирает последнее дамэ у группы противника и захватывает ее. Окружение — основа го, но не цель, хотя бывает, что гибель большой группы приносит победу. Помните, в школе многие играли в «точки»? Так вот, эта игра в принципе развилась из упрощенного го.

    Поставленный камень остается неподвижным и может «выжить», только объединяясь в группу с камнями по соседству: чтобы «убить» такую группу, надо окружить ее снаружи и изнутри. Каждый новый камень увеличивает группу, она захватывает пространство и формирует внутри себя замкнутые пустоты («глаза»). Группа, у которой больше одного «глаза», называется крепостью. Гибель ей не грозит, поскольку закрыть оба «глаза» одним ходом нельзя. Когда крепостей столько, что их стены соприкасаются, а новые строить негде, игроки делят оставшееся пространство. Там, где шахматная партия заканчивается разгромом армии противника, в го наступает перемирие: игроки пасуют, обмениваются пленными (снятыми с доски камнями) и подсчитывают очки. Каждый окруженный пункт или захваченный камень приносит одно очко, и тот, кто набрал больше, выигрывает.

    Го считают мирной игрой, но при разборе партии звучат слова «разрезание», «удушение», «плен», «гибель». Кто же на другой стороне доски? Начинающий игрок ответит «враг», ведь надо победить, а значит — воевать! Опытный скажет «друг», ибо его цель — правильное взаимодействие, а как взаимодействовать с врагом? Для мастера игры там нет никого: на другой стороне доски — ты сам.

     

    • Захват

      Если играющий белыми поставит свой камень на перекрестье А, группа черных потеряет последнюю степень свободы (дамэ), перейдет в статус «захваченной» и будет снята с доски.

     

    Го в России

    Осенью в Москве разыгрывался Кубок посла Японии по игре го, крупнейший российский турнир, на который приезжают в том числе мастера мирового класса. В минувшем году турнир посетили мэйдзин Тэцуя Митани и вице-президент Европейской федерации го госпожа Ли Тинг — они проводили мастер-классы, разборы партий и сеансы одновременной игры. Фестиваль «Японская осень», в рамках которого проходил турнир, устраивается с целью познакомить россиян с культурными традициями Страны восходящего солнца. В России го — официальный вид спорта, летом 2016 года в Санкт-Петербурге состоится Европейский го-конгресс, но, несмотря на это, популярность игры растет довольно медленно. Отчасти это связано с тем, что нет учителей, готовых работать с начинающими, к тому же не хватает коммерческих условий, в которых преподавание го станет достойным делом (хотя бы самоокупаемым). Но энтузиастов белых и черных камней становится все больше и больше, а энтузиасты, как известно, страшная сила.

     

     

     

    Ядерное го и другие истории

    В качестве изобретателя го упоминают императора Яо династии Хань (2356−2234 годы до н.э.). Якобы его сын имел вздорный нрав, и для его наставления придумали игру, обучающую рациональному мышлению. Игра в го была для аристократа обязательной и входила в число «четырех добродетелей» (го, музыка, каллиграфия и живопись).

    Но принципы игры далеки от развлечения. Скорее всего, ее колыбель — монастырь или пещера отшельника. Буддисты видели на доске единство формы и пустоты, астрологи — звездное небо и битву земли и воды. Само же стратегическое планирование с гармоничным распределением ресурсов восходит к древнейшему даосскому принципу: «достигай большого малыми усилиями». Видимо, изначально го было не игрой, а чем-то другим — гаданием, ритуалом, психологической практикой или средством общения (одно из названий го — сюдан, «разговор камнями»).

    В VIII веке го проникло в Японию, где стало придворным развлечением. В XII веке наступил период междоусобных войн, власть взял сегун, и го приравняли к боевым искусствам. Показательна история, произошедшая 500 лет назад. Два мастера меча, Миямото Мусаси и Ягю Дзюбэй Мицуеси, славились своим искусством, и аристократы спорили, кто одержит верх. Однажды их пути пересеклись. Они никогда не встречались, но по манере держаться, описанию мечей и внешности узнали друг друга. Ситуация была тупиковая: разойтись без поединка означало потерять лицо, а дуэль могла закончиться гибелью обоих бойцов. Легенда гласит, что они зашли в чайный дом обдумать случившееся и решили сыграть в го. Увидев, что ни один не уступает другому, мастера прервали партию и разошлись, преисполненные уважения друг к другу.

    Го было основой военной доктрины Японии и в XX веке: анализ тихоокеанского театра военных действий показал, что принципы у японских генералов схожи. Отметив на карте базы и направление основных ударов, можно увидеть, что стратегическое превосходство было на стороне Японии, но нехватка ресурсов не позволила «камням» укрепиться.

     

    • Секи

      Пример ситуации «секи» (тупиковой). Ни черные, ни белые не могут поставить камень на выделенные точки без постановки собственного же камня в ситуацию «атари» (то есть позицию, в которой у камня остается одно, последнее дамэ).

     

    Играли и во время войны. Небывало трагичным выдался матч за титул хонимбо в 1945 году: 6 августа игра была прервана ослепительной вспышкой и ужасной силы взрывом, ударная волна выбила стекла, расшвыряла камни, побросала людей на пол. Все были растеряны, оглушены, не могли понять, что произошло, но восстановили позицию и доиграли партию — это было в Ицукаити, пригороде Хиросимы. «Ядерное го» вошло в историю как пример истинно японской стойкости духа.

    С XVI века во многих японских учреждениях сохранилась традиция учитывать при отборе на должность умение играть в го. Го в Японии считается уважаемой профессией, спонсоры охотно вкладываются в его рекламу. В стране около 500 профессиональных игроков, они сражаются за титулы, пишут книги, комментируют партии, судят турниры, участвуют в фестивалях и дают уроки. Четыре школы оформились в две академии го: Нихон Ки-ин в восточной части страны и Кансай Ки-ин — в западной. К слову, в Японии игра зовется «и-го», в Китае — «вэйци», в Корее — «бадук».

    Го не стоит на месте: новые дебюты и правила появлялись уже в XX веке сначала в Японии, затем в Корее, а в наше время вперед вырвался Китай: раньше го в Поднебесной преследовалось, но призыв Партии стать первыми во всем коснулся и древней игры. Так игра и становится достоянием человечества: Китай выковал клинок, Япония закалила его, Корея отточила до блеска, и теперь каждый вправе искать свой путь.

     

    • Лестница

      Черные не могут «сбежать» до тех пор, пока край доски не оборвет очередность ходов.

     

     

     

    Математика плюс философия

    Удивительно, что алгоритм го до сих пор не раскрыт и даже самая мощная программа играет слабее человека (одну победу можно счесть случайностью, и рано пока говорить о победе искусственного разума над человеческим). Доска большая, изначально выигрышных дебютов нет, и достичь гармоничного развития простым перебором вариантов невозможно — их больше, чем атомов во Вселенной. Камни одинаковы, значение имеет только место, где они стоят, и форма, которую они образуют. Оценить потенциал построений, выбрать приоритеты — сложные задачи, связанные с такими разделами математики, как теория графов и распознавание образов. Здесь важна оптимальность действий, а это компьютеру пока не под силу. Быть может, го — ключ к искусственному разуму, и когда машина научится регулярно побеждать человека, она потянется и скажет: «Слушай, может, хватит? Я разумное существо, давай обговорим мои права».

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

    Наконец, у игры в го есть и философский подтекст — он тоже влияет на стиль игры и принятие решений. Го учит пониманию, что добиться всего невозможно — надо брать, сколько можешь удержать, а остальным делиться. Рано или поздно игрок осознаёт, что теряет силы в драке за огрызки (отдельные камни). Мастерство приходит с пониманием принципов гармонии, навыков развития, оптимизации усилий, планирования и обустройства. И если шахматы воспитывают бойца, то го — правителя, организатора.

     

     

     

     

    Искусство игры

    Сейчас в мире наблюдается подъем интереса к го, однако лучшие игроки по-прежнему рождаются в Азии. С одной стороны, го — игра счетная, с жестким прессингом, филигранными сменами темпа, требующая точного анализа оперативной обстановки, в этом европейцы сильны: культура Запада развивает левое, аналитическое полушарие мозга, ответственное за логику, речь, счет. Но в игре мы должны сперва понять все части целого, а уже потом сложить их воедино, и здесь азиаты, для которых частное — лишь часть общего, сильнее. Иероглифика, тональные языки, каллиграфия, медитация — все это развивает правое, «немое» полушарие, в ведении которого интуиция, художественные, музыкальные и прочие нелогические способности. В итоге там, где европеец начинает метаться и принимать спутанные решения, азиат видит фрагменты недоработанной картины и спокойно исправляет недостатки.

    Мы старательно выстраиваем вокруг себя островки стабильности, будто намереваемся жить вечно. Изучающему же го необходимо постоянно меняться, ведь только с изменениями происходит рост и развитие. Преодоление страха и обиды на первом этапе, жадности и гнева на втором, косности и скепсиса на третьем, скуки и усталости на четвертом — вот этапы познания го. Со временем игроку начинают мешать не технические проблемы игры, а изъяны характера — рассеянность, горячность, неуверенность, жадность, авантюризм. В этот «потолок» (их несколько) рано или поздно упирается каждый ученик. Го не похоже на другие игры, где можно обойтись заучиванием стандартных позиций и приемов, именно поэтому оно — инструмент, а не цель.

    Титулы го

    Один из сильнейших игроков прошлого, Никкай (1559−1623) стал первым мэйдзином (мастером) и возглавил дом Хонимбо, первую японскую школу го. Два игрока этой школы, Хонимбо Досаку и Хонимбо Сюсаку, остались в истории под прозвищем «кисэй» («святой»). Сегодня мэйдзин, хонимбо и кисэй — переходящие титулы, за которые сражаются профессиональные игроки.

    Невозможно сказать, что такое го — игра, спорт, философия, медитация или боевой симулятор. Порой кажется, что это игра отбирает людей, а не они ее выбирают. И возможно, в будущем го объединит Запад и Восток, правое полушарие мозга с левым, помирит физиков и лириков и сведет воедино все религиозные и философские течения. Так стоит ли удивляться тому, что для Японии эта игра настолько значима? Давайте остановимся и прислушаемся. Ибо мир наш суетен, а жизнь стремительна.

    Дмитрий Скирюк — специалист по истории настольных игр, автор ряда реконструкций утерянных правил, начертаний игровых досок и фигур различных дисциплин

     

    Немного интересных фактов об игре Го:

    • Го — самая древняя игра в мире, правила которой сохранились в первоначальной форме. Возраст игры насчитывает 2500-3000 лет, хотя некоторые дают оценку аж в 4000 лет.
    • Го является второй по популярности игрой в мире, уступая лишь китайским шахматам Сяньцзы.
    • Го в Японии называется И-го (囲碁), в Корее — Бадук (바둑), в Китае — Вейчи (围棋).
    • Лучшие профессиональные игроки зарабатывают порядка миллиона долларов в год. В 2004 году лучшим был Тё У, 9 профессиональный дан из Японии, выигравший 1,04 млн. долларов.
    • Правила Го настолько просты, что их может понять четырехлетний ребенок, но в то же время достаточно сложны для того, чтобы компьютерные программы не могли победить лучших игроков.
    • Считается, что возможных позиций в игре больше, чем атомов в видимой вселенной.
    • В Японии, Китае и Корее есть телевизионные каналы, целиком посвященные игре Го.
    • Игроки относятся к Го оченьсерьезно. Они могут купить то, что по сути является прямоугольным куском дерева 42см х 45см х 18см, за 127 тыс. долларов.
    • Самая большая игра Го проводилась в японском городе Оита на поле размером 40 х 40 м. Каждый камень имел диаметр 1,8 м и весил около одного килограмма.
    • Го считается одним из основных вызовов искусственному интеллекту.
    • О бессмертности и постоянном почитании игры Го на протяжении тысячелетий говорит тот факт, что двумя сильнейшими игрокамивсех времен часто называют Huang Longshi (1651? – 1691?) из Китая и Honinbo Dosaku (1645 – 1702) из Японии.
    • Есть исторический рассказ, повествующий о том, что в XVII веке законы Тибета решались за тремя партиями Го.
    • Считается, что Го останавливает или вовсе предотвращает часто встречающееся старческое слабоумие. Кроме того, Го может снизить вероятность болезни Альцгеймера.
    • Го оказывает огромное влияние на умственное развитие детей, прежде всего в области рассуждений.
    • Шахматы, в основном, игра для левого полушария мозга. При игре в Го активно задействуются оба полушария.

     

    И еще немного про игру:

    1. Го предположительно появилась в Китае, ещё до нашей эры и относилась там к 4 добродетелям, наряду с каллиграфией, живописью и игрой на лютне.

    2. Спустя многие годы Го попало в Японию и не прогадало. Японцы со временем стали самыми большими мастерами игры. Поэтому их ошибочно считают создателями Го.

    3. Японцы так полюбили Го, что даже во время второй мировой войны проводили крупные турниры. Во время падения атомной бомбы на Хиросиму в городе игралась вторая партия матча за звание чемпиона. Эту партию в учебниках по Го называют «Партия атомной бомбы»

    4. Удивительно, но в Корее в конце 80-х началось массовое безумие по Го. Население страны было в два раза меньше Японии и при этом в Корее числилось больше игроков. В последних 54 крупных международных турнирах в 41 победу праздновали корейцы.

    5. В Го существует очень интересная система уравнивания шансов белых и черных на победу – коми. Черные имеют преимущество за счет первого хода и поэтому белые изначально играют с небольшой форой — сейчас эта величина колеблется от 5,5 до 7,5 очков. В основном применяют дробное количество очков в коми, чтобы исключить вероятность ничьи. По-моему замечательное правило, исключающее договорные игры.

    6. У Го существуют свои традиции этикета. Согласно этикету Го — сильнейший по рейтингу игрок должен играть белыми и при необходимости слабому дают фору — коми. Сдаться при поражении можно двумя путями, либо просто сказать «сдаюсь», либо выложить одновременно на доску более одного камня. Вы всегда можете попросить выигрывшего вас игрока разобрать партию и указать ошибочные по его мнению ходы — соперник не должен отказывать.

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

    8. Для компьютера Го считается одной из самых сложнейших игр. До сих пор сильнейшие программы не могут играть хотя бы на уровне первого дана (в предыдущей статье я вкратце описал систему Кю-Дан).

    9.MoGoTitan — это сильнейшая программа по игре в Го. Она работает на компьютере который в 1000 раз мощнее Deep Blue, победившего Гарри Каспарова в шахматном матче. При всём при этом сильнейшие игроки в Го её спокойно обыгрывают и при этом времени на обдумывание ходов тратят намного меньше.

     

    [источники]

    источники

    http://www.popmech.ru/technologies/235660-go-pochemu-kompyuter-tak-dolgo-ne-mog-odolet-cheloveka/#full

    http://vsevgo.ru/stati-2-2/2012-10-08/interesnye-fakty-ob-igre-go

    http://computerstory.ru/?p=1464

     

    Вот кстати многим понравилась в свое время игра Распутываем нитки, а вот Петли Дзэн. Вот тут Стреляем из лука и Говорят, можно продержаться 18 секунд ?. Как то была популярной игра 2048 и легенда игр — Contra. Ну вот еще Не дайте Лисице скушать Уточку ! и Вспоминаем старое: Pacman

    Оригинал статьи находится на сайте ИнфоГлаз.рф Ссылка на статью, с которой сделана эта копия — http://infoglaz.ru/?p=88341

    Почему вам стоит изучить Go? / Хабр

    Всем привет! Представляю вашему вниманию мой перевод статьи (включая графики) Кевала Патела Why should you learn Go? Статья содержит много интересных фактов, которые, по моему мнению, будет полезно узнать новичкам в Go.

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

    Изображение взято с ресурса kirael-art.deviantart.com/art/Go-lang-Mascot-458285682

    “Go станет серверным языком будущего.” — Tobias Lütke, Shopify

    За последние пару лет произошёл мощный рост нового языка программирования: Go, или Golang. Согласитесь, ничто так не может свести с ума разработчика, как новый язык программирования. Поэтому, я начал изучать Go 4-5 месяцев назад и вот что я могу сказать о том, почему вам стоит изучить этот новый язык.

    В этой статье я не собираюсь учить вас, как написать «Привет, мир!!». Есть много других статей об этом. Я собираюсь прояснить текущее состояние компьютерного аппаратного и программного обеспечения и зачем вам такой новый язык, как Go. Ведь если нет проблем, то и решения не нужны, верно?

    Ограничения железа:

    Закон Мура не работает.

    Первый процессор Pentium 4 с тактовой частотой 3.0 ГГц был представлен ещё в 2004 году компанией Intel. Сегодня, мой Macbook Pro 2016 имеет тактовую частоту 2.9 ГГц. Таким образом, около десятилетия нет особого прогресса чистой вычислительной мощности. Ниже на графике, вы можете увидеть сравнительный график роста вычислительной мощности по времени.

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

    Поэтому, для решения проблемы выше,

    • Производители начали добавлять больше ядер в процессор. На текущий день нам доступно 4-х и 8-ми ядерные процессоры.
    • Также положено начало гиперпоточности.
    • Добавили больше кэша в процессор для увеличения производительности.

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

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

    “Современные процессоры похожи на забавные автомобили, заправленные нитро, — они превосходны в гонке на четверть мили. К сожалению, современные языки программирования, как трасса Монте-Карло — полны изгибов и поворотов.”  —  David Ungar

    В Go есть горутины !!

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

    Но большинство современных языков программирования (такие, как Java, Python) пришли из однопоточной среды разработки 90-х. Хотя большинство этих языков поддерживают многопоточность, но реальная проблема связана с одновременным выполнением, блокированием потока, состоянием гонки и тупиковой ситуацией. Эти вещи осложняют создание многопоточного приложения на вышеназванных языках.

    Например, создание нового потока в Java неэффективно использует память. Поскольку каждый поток потребляет примерно 1МБ памяти из кучи (динамически распределяемой памяти. — прим. перев.) и в итоге, если вы запустите тысячи потоков, то они окажут колоссальное давление на память и могут вызвать завершение работы приложения из-за её нехватки. К тому же, если вы хотите, чтобы два или более потока могли общаться между собой, то сделать это будет довольно трудно.

    С другой стороны, Go был выпущен в 2009 году, когда многоядерные процессоры были уже доступны. Вот почему Go был создан с учётом многозадачности (concurrency. — прим. перев.). Go использует горутины вместо потоков. Они потребляют почти 2КБ памяти из кучи. Поэтому, вы можете прокручивать хоть миллионы горутин в любое время.

    Как работают горутины? Подробнее: golangtutorials.blogspot.in/2011/06/goroutines.html

    Другие преимущества:

    • Горутины имеют расширяемые сегментированные стеки. Это означает, что они будут использовать память только по необходимости.
    • Горутины имеют более быстрое время запуска, чем потоки.
    • Горутины поставляются со встроенными примитивами для безопасного обмена данными между собой (каналы).
    • Горутины позволяют избежать необходимости прибегать к блокированию мьютексов при совместном использовании структур данных.
    • Также, горутины и потоки ОС не имеют сопоставления 1:1. Одна горутина может запускаться во множестве потоков. Горутины объединены (multiplexed. — прим.перев.) в малое количество потоков ОС.

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

    Все вышеупомянутые пункты делают Go очень мощным для обработки многозадачности так же, как в Java, С и С++, и в то же время сохраняя красоту и естественность кода, как в Erlang.

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

    Go запускается непосредственно на железе.

    Одно из самых значимых преимуществ использования С/С++ вместо современных языков, типа Java/Python, это их производительность. Потому что С/С++ компилируются, а не интерпретируются.

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

    Этапы выполнения кода, основанных на JVM

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


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

    Go вобрал лучшее из обоих миров. Как и низкоуровневые языки, типа С/С++, Go компилируемый язык. Это подразумевает производительность, близкую к низкоуровневым языкам. Он также имеет свой сборщик мусора для распределения и удаления объектов. Больше malloc() и free()! Круто!

    Код, написанный на Go, легко поддерживать.

    Позвольте мне сказать вам одну вещь. У Go нет такого безумного синтаксиса, как в других языках, — всё очень аккуратно и чисто.

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

    Go намеренно не содержит множество особенностей ООП языков.

    • Нет классов. Каждая вещь делится только на пакеты. Вместо классов Go использует только структуры (structs. — прим.перев.).
    • Не поддерживает наследование. Это упрощает модифицирование кода. В других языках, типа Java/Python, если класс ABC наследует класс XYZ, и вы при этом делаете какие-то изменения в классе XYZ, то это производит дополнительное изменения во всех наследованных от него классах. К тому же, без наследования, код Go становится более простым для понимания (так как нет super классов, на которые нужно обращать внимание при изучении участков кода).
    • Нет конструкторов.
    • Нет аннотаций.
    • Нет дженериков (универсальных шаблонов. — прим.перев.).
    • Нет исключений.

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

    Читабельность кода против его производительности.

    График выше показывает, что Go почти так же эффективен как С/С++, и имеет такой же простой синтаксис, как Ruby, Python и другие языки. Это беспроигрышный вариант (win-win. — прим.перев.) как для людей, так и для компьютера!

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

    Go поддерживается Google.

    • Я знаю, что это не совсем техническое преимущество. Но Go разработан и поддерживается Google. У Google самая большая облачная инфраструктура в мире и она всё ещё расширяется. Google создала Go для решения их собственных проблем с поддержкой масштабируемости и эффективности. С этими же проблемами вам придётся столкнуться и при создании своего собственного сервера.
    • Более того, Go используется такими компаниями, как Abode, BBC, IBM, Intel и даже Medium. (Источник: github.com/golang/go/wiki/GoUsers)

    Заключение:

    • Хотя Go отличен от других ООП языков, это всё тот же зверь. Go предоставляет вам такую же высокую производительность, как в С/C++, высокоэффективную обработку многозадачности, как в Java и такое же удобство написания кода, как в Python/Perl.
    • Если вы не планируете изучать Go, то я всё же скажу, что лимит аппаратного обеспечения оказывает давление на нас, разработчиков ПО, которые хотят писать очень эффективный код. Разработчику нужно понять железо и соответственно оптимизировать свою программу. Оптимизированное ПО можно запустить на дешёвом и медленном устройстве (типа IOT), что в целом лучше влияет на опыт взаимодействия конечного пользователя (UX. — прим.перев.).

    Что такое язык Go и зачем его использовать для вашего проекта

    Если вы планируете создать или оптимизировать приложение для своего бизнеса, начните с выбора подходящей технологии. В мире быстрых изменений владельцы бизнеса часто прибегают к Ruby, поскольку он позволяет им создавать приложения действительно быстро. Но зачем использовать Голанг? Разработчики часто заявляют, что Go идеально подходит для создания проектов с высокой безопасностью, высокой скоростью и высокой модульностью, например, в индустрии FinTech. Более того, с этим языком вашим разработчикам не нужно строить башню из Python, Bundler, WSGI, Redis и других технологий.Все необходимые инструменты находятся в самом Go. В этом посте мы подробнее рассмотрим, что такое Go, его плюсы и минусы, а также когда использовать Go (какие проекты могут извлечь выгоду из этого языка программирования).

    Что такое Go?

    Go или Golang — это язык программирования с открытым исходным кодом. Он статически типизирован и производит скомпилированные двоичные файлы машинного кода. Разработчики говорят, что язык Google Go — это Си двадцать первого века, когда дело касается синтаксиса. Однако этот новый язык программирования включает инструменты, которые позволяют безопасно использовать память, управлять объектами, собирать мусор и обеспечивать статическую (или строгую) типизацию вместе с параллелизмом.

    Впервые мир познакомился с Go в 2009 году благодаря Робу Пайку, Роберту Гриземеру и Кену Томпсону из Google. Основная цель создания Go заключалась в объединении лучших возможностей других языков программирования:

    • Простота использования с современной производительностью

    • Высокая эффективность и статическая типизация

    • Повышенная производительность для работы в сети и полное использование многоядерной мощности

    Каковы преимущества использования Go для вашего проекта?

    Почему популярен язык Go? Помимо милого талисмана, у Go есть целый ряд преимуществ. Язык начал развиваться почти сразу после того, как он был выпущен в 2009 году. Он быстро начал дрейфовать с 65-го места по всему миру. Затем Business Insider назвал Go самым популярным языком программирования 2016 года. Согласно индексу TIOBE, рейтинг Go в 2017 году сильно вырос и немного снизился, но в 2018 году он постоянно повышался, как показано на графике ниже.

    [TIOBE Index]

    Возможно, вы захотите узнать, почему Go растет.Причина в том, что Go имеет ту же производительность, что и C, и его намного проще поддерживать, чем Java, поскольку нам не нужна виртуальная машина, период прогрева, ад JAR и так далее. Давайте посмотрим на другие преимущества Golang.

    Тратьте меньше времени и денег на разработку приложения

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

    Использование Go для ряда приложений

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

    Повышение производительности и расширение аудитории для вашего приложения

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

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

    Не беспокойтесь о сбое приложения

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

    Легко найти разработчиков Go для вашего проекта

    Go стремительно растет. Если вы посмотрите опрос разработчиков, проведенный Stack Overflow за 2018 год, то увидите, что Go входит в пятерку самых любимых и востребованных языков. Все больше и больше профессионалов погружаются в мир го.Согласно последним исследованиям, в 2018 году на рынке уже можно найти более 1 633 000 разработчиков Go, что на 60% больше, чем в 2017 году. Согласно блогу Go, все больше и больше участников приходят в Go из сообщества Go, которое также означает, что все больше и больше людей становятся профессионалами в го.

    [Statista]

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

    Разработчики могут легко поддерживать приложения Go.

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

    • Автоматическая документация . GoDoc автоматически генерирует документацию из кода Go. С GoDoc вы получаете структурированную и отформатированную техническую документацию, которая включает полезные функции, такие как перекрестные ссылки, примеры кода и даже ссылки на репозиторий системы контроля версий.

    • Статический анализ кода .GoMetaLinter — это метатул, который помогает разработчикам быстро и подробно анализировать свой код. Это экономит много времени и позволяет создавать собственные парсеры LR для лучшего анализа.

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

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

    Как видите, Go дает множество преимуществ для владельцев бизнеса и разработчиков.Это одна из причин, почему язык стал одним из самых популярных. И именно поэтому Go стал критически важным для компаний по всему миру, включая Hootsuite, 500px, OPPO и Intercom. Однако Go — не идеальный язык (хотя Google прилагает все усилия, чтобы сделать его таким). Вам следует рассмотреть недостатки Go, прежде чем вы решите использовать его в своем проекте.

    Какие недостатки использования Go?

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

    Создатели Go хотели сделать его похожим на C, чтобы упростить реализацию. И они это сделали! Более того, Go стал неплохим выбором для одностраничных приложений, предоставляя все основные элементы пользовательского интерфейса. Однако в Go нет собственной библиотеки графического интерфейса. Для вас и ваших разработчиков это означает, что для подключения библиотеки к вашему приложению потребуется довольно много времени и знаний, а не использовать какое-то собственное решение, как, например, Python или Java.

    Для каких проектов лучше использовать Go?

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

    Облачные сервисы

    Как создатель Go, Google использует этот язык для создания облачной инфраструктуры: он обеспечивает максимальную производительность и масштабируемость для Google Cloud Platform.Но есть еще более известные облачные компании, использующие Go по тем же причинам: Dropbox, Terraform, Kubernetes и Docker.

    Медиа-платформы

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

    Новостные агентства

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

    Услуги по запросу

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

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

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

    .

    Что такое Go? | Американская ассоциация го

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

    Несколько правил

    Go можно быстро продемонстрировать и легко понять. В эту игру приятно играть, используя широкий спектр навыков.На каждом уровне игры есть свои прелести, награды и открытия. Уникальная и надежная система гандикапов привлекает гораздо больше игроков «в поле» для равного поединка. Ничьи случаются редко, и типичная игра сохраняет плавность и динамизм намного дольше, чем сопоставимые игры. Раннюю ошибку можно совершить, использовать с выгодой или обратить вспять по ходу игры. Нет простой процедуры, чтобы превратить явное преимущество в победу — только продолжение хорошей игры. Игра вознаграждает терпение и уравновешенность агрессией и жадностью; баланс влияния и территории может меняться много раз в ходе игры, и сильный игрок должен быть готов к гибкости, но решимости.Го-мышление кажется более латеральным, чем линейным, менее зависимым от логических выводов и более зависимым от «ощущения» камней, «чувства» формы, гештальт-восприятия игры.

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

    Чтобы узнать больше о том, почему миллионы людей любили эту игру на протяжении тысяч лет, посетите наши Десять главных причин играть в го; или, если хотите, начните играть прямо сейчас!

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

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

    Поскольку в го предусмотрена уникально надежная система гандикапов, игроки с совершенно разными сильными сторонами могут участвовать в относительно равных соревнованиях. Игра может быть обычным времяпрепровождением на время простоя — или образом жизни. Майкл Редмонд, единственный западный игрок, получивший статус высококлассного профессионального игрока в Азии, на вопрос, почему он посвятил свою жизнь карьере, ответил: «Потому что я люблю эту игру.«

    Надеемся, что вы тоже.

    .

    Что означает GO?

    000 Разное

    000 Разное

    Get Интернет »Чат

    GO

    Gordon

    Правительственный »Поставщики

    Оцените:
    GO

    Go Out14

    Оцените это:
    GO

    На выходе

    Разное »Несекретный

    Оцените его:
    Оцените:
    GO

    Главный офис

    Бизнес» Общий бизнес

    0

    0005

    0005» Общие вычисления

    9004 9000 9000 GO по всему миру Приказ

    для государственных органов »Правительство США

    9 0005

    000

    0004 GO

    GO

    Получить Orga nized

    Бизнес »Общий бизнес

    Оценить:
    GO

    Генетология

    Медицина» Лаборатория

    GO

    Главный офицер

    Правительственный »Военный

    Оцените его:
    GO

    Правительство

    Оцените:
    GO

    Общий заказ

    Бизнес »Международный бизнес — и многое другое…

    Оцените:
    GO

    Расширенные возможности

    Сообщество »Образовательные

    GO

    Правительство Онтарио

    Региональное »Канадское

    Оцените его:
    GO

    Game Over

    27

    0007 Оценить:
    GO

    Только для парней

    Бизнес »Профессия и должности

    Оценить: Оцените:
    GO

    Групповые операции

    Сообщество »Образовательные

    Оцените это:

    Только для девочек

    Разное »Несекретный

    Оцените:
    GO

    Golden Opportunity

    08

    0 950007 Разное» 95175 Оцените:

    Business

    GO

    GeschäftsOrdnung

    Международный »Немецкий

    Оцените:
    GO

    Global Business

    GO

    Global Business

    90 005

    Оцените:
    GO

    Общие обязательства

    Разное »Несекретные

    GO

    Общая организация

    Бизнес »Общий бизнес

    Оцените:
    GO

    Группы в сети

    Интернет» Чат

    Оцените:
    GO

    Golden Oldies

    Разное »Несекретный

    Оцените:
    GO GO Business

    Global И позиции

    9000 5

    Оцените: