Pull to refresh

Comments 28

Здорово, что появился sync/Map, но вот тонкости когда его использовать, а когда нет — это немного не в духе Go.
но вот тонкости когда его использовать, а когда нет — это немного не в духе Go.
Поясните пожалуйста =)
не хочу заводить флейм, просто ваш комментарий (что в духе и не в духе Go) заинтриговал меня
А мне очень-очень хотелось бы, чтобы в языке наконец появились значения по умолчанию для аргументов функций и полей структур. Это было бы дико удобно.
Но иногда это плохо для поддержки кода, когда надо добавить параметров к функции.
Тут тоже варианты есть. Можно было бы попробовать как-нибудь так:
func SomeFunc(a int, b int = 10, c int = 20) { ... }
SomeFunc(5, c = 40);

Афайк, внутри компилятора аргументы функций и структуры хранятся одинаково. Только такой синтаксис реализовать сложнее будет.
Proposal для Go 2 написали? :)
Возможно такой уже есть, надо искать.

Если хорошо расписать, то какой-то минимальный шанс на значения по умолчанию для структур есть.
Насчёт параметров функций по умолчанию не уверен. Не упаковывал бы
это всё в один proposal.
Насколько я понял, обратная совместимость сохранилась?
В статье данная часть отсутствует, но в описании к релизу есть:
«As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before.»
Недавно была статья на хабре про сравнение async/await с корутинами го. Я не специалист, но заинтерисовало что такое корутины, и как они работают в Go. Если кто хорошо разбирается, возможно сможет улучшить статью, добавив в комментарии улучшунный код на го. Хочется понять с точки зрения асинхронности, когда лучше использовать корутины(то есть когда они будут быстрее). Сам лично набрел на пост в стековерфлоу, что хорошо спроектированное приложение, использующее потоки всегда будет быстрее файберов(именно они используется в основе корутин, если я правильно понял). Асинхронный код в c# писать легко, однако, если нужна будет скорость, можно запутатся во множестве деталей. Ну и поздравляю приверженцев Go с выходом новой версии.
Печалит отказ от ppc. Хочется некоторое ПО на go на NAS поставить. А не выходит.
А где именно об этом написано? В релизнотесах вижу, что ppc64x now requires at least POWER8 support, а вот упоминания ppc32 не вижу. Не там смотрю?
В том и дело, что поддержка только ppc64.
Go радует тем, что изменения в новых версиях очень обдуманные и осторожные. Не возникает чувства, что ты больше не знаешь язык.
А чего сразу в минуса? Вот я хочу знать, зачем он мне? И такие сразу жмяк жмяк дизлайк… :) Так профессионально ответили, сразу ясно, что школота дизлайкает после ночной вписки.
Если занимаетесь серверным ПО: легко читаемый синтаксис, жрёт мало памяти, удобный инструментарий. Ежели занимаетесь десктопным ПО, фронтэндом, мобилками, встроенным ПО — 95%, что не нужен. Вас устроит этот ответ? В таком случае минусы не ставлю, но от вписочки школьной не отказался бы :3
Для десктопа тоже можно — github.com/lxn/walk весьма не плоха
фронтенд с gopherjs так же довольно приятно готовить
Вот, адекватный ответ. Благодарю. Минусаторы так и остались школотой и не смогли ответить.
зачем он мне?

  • простой синтаксис и go fmt


  • нормальное ООП на интерфейсах. чтобы реализовать для типа интерфейс, не надо менять тип


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


  • всё, что нужно, есть в стандартной библиотеке искаропки. На вскидку — http сервер c http/2.0 и tls, https без использования OpenSSL, поддержка автоматического получения и обновления TLS-сертификатов, сериализатор asn, data-driven шаблоны для генерации форматированного вывода, парсеры, синт.анализаторы. Не надо на любой чих мучительно искать очередную маргинальную библиотеку от непонятно кого.


  • поддержка всех необходимых средств для тестирования и замеров производительности out of the box. Профилирование можно включать/отключать удаленно в продакшн в любой момент времени, и это не снизит существенно скорость программы.


  • сверхбыстрый быстрый GC — паузы не превышают 100 микросекунд на любом размере хипа. Для сравнения STW паузы в net core зависят от настроек GC и размера хипа, и измерены в районе 100 миллисекунд. В 1.9 GC ещё и параллельная сборка мусора добавлена


  • горуитины повышают перформанс и упрощают разработку — линейный синхронный код vs. асинхронщина, в которую ни кто толком не умеет.


  • кросс-платформенная компиляция out of the box и сборка программы в один самодостаточный бинарник без внешних зависимостей избавляет от dll hell, dependency hell и костылей в виде docker-а. Бинарник Гоу весит мало, потребляет память скромно и ему для запуска не нужна виртуальная машина внушительного размера на подобие JVM.


  • высокая скорость компиляции — существенно выше чем в C#, Java, Rust не говоря уже о C++ и Scala
Вот еще один адекватный ответ. Благодарю.

Я только недавно начал изучать Go, однако сразу бросилось в глаза его сходство с PureBasic. С большего, это два Си-подобных языка, кроссплатформенные, не имеют классов в явном виде. Единственное, что в PureBasic нету корутин и GC, но в то же время у него богаче стандартная библиотека, есть поддержка UI. Удивительно.

В пакет sync добавился новый тип Map
Посмотрел описание на сайте Go и не вполне понял (есть сомнения) следующее:
It is optimized for use in concurrent loops with keys that are stable over time, and either few steady-state stores, or stores localized to one goroutine per key.
Sign up to leave a comment.

Articles