• За что я не люблю Go
    0
    Тогда у нас есть момент, где сервер откидывает новые соединения, пока не перезагрузится. Это неприемлемо во многих ситуациях.

    Он не откидывает новые соединения, он исключен из балансировки.
    Если у вас только один инстанс (что случай только для балансера), то дейлайте как это сделано в nginx — старые процессы обрабатывают только текущие запросы, а все новые идут на новые.

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

    Если у вас HA, то нету никаких проблем тут. Та же стратегия во время деплоймента новой версии, только вместо релоада — рестарт.
  • За что я не люблю Go
    +1
    Я про конфиг уровня приложения говорю.


    А что, http сервер уже не часть приложения?

    Как предлагается рестартом сервера это решать, я не понимаю. Вот у нас есть 2 запроса, один — завершающийся старый со старыми параметрами, другой — новый с новыми.

    Делать нужно graceful stop приложения (то есть не принимать новых коннектов, а только завершать старые), это должно быть уже у вас реализовано, а потом уже создавать новые коннекты, обьекты и тд — после этого принимать новые запросы.

    Если у меня 1рпц, то почему бы и нет, если это облегчит подобные сценарии.

    Вы только что сами придумали себе кучу проблем, вместо того чтобы просто релоаднуть приложения когда конфиг изменился (это можно уже отследить).
  • За что я не люблю Go
    0
    Не нужно. Потому что контроллеры живут как правило per call, создаются DI контейнером, и легко получают новые параметры на все новые запросы.


    Есть еще масса параметров http сервера, когда нужно будет его рестартануть (ключи, конфиг tls, etc).

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


    Не только обновить коннекшн стринг, а закрыть старые и создать новые коннекты. А что, вы создаете новый коннект к базе на каждый запрос?
  • За что я не люблю Go
    0
    Например, коннекты к базе? Или вам не нужно будет рестартить http сервер, конфиг которого изменился?
  • За что я не люблю Go
    0
    Смысл в таком сценарии, что мы меняем файл, и наша структура автоматически подцепляет изменения.


    Не забудьте, что вам еще нужно пересоздать все обьекты, которые зависят от конфига (сделать новые коннекты, etc). Я предпочитаю делать перезагрузку всего приложения — например смотреть на конфиг, если изменился, то релоад приложения.

    Хотя сейчас, когда мы используем kubernetes, смысла в этом уже нету — либо рестартануть pod (если конфиг замаунчен как раздел) или просто смотреть kubernets API на изменения конфига. В таком случае умение библиотеки изменять структура после изменения файла бесполезно.
  • За что я не люблю Go
    0
  • За что я не люблю Go
    0
    Ну как это. Если я хочу протестировать работу приложения со стейблом, бетой и ночником одной и той же библиотеки, как это сделать

    Контроль версий, просто создаете новую ветку с новой версией завендоренной библиотеки.
  • За что я не люблю Go
    0
    Вы сейчас рассуждаете как 15 летний школьник, который вчера попробовал на React Native написать мобильное приложения и ничего не понимает в бэкэнд инфраструктуре.
  • За что я не люблю Go
    0
    я гуглом совсем не пользуюсь и результат у меня такой же, что в моем случае объясняется популярностью запросов `rust lang` и `golang` (смотрите google trends).
    Вы же про историю веб-поиска в аккаунте гугл говорите?
  • За что я не люблю Go
    0
    Как работает автозаполнение

    Подсказки подбираются с учетом таких факторов, как популярность и новизна поисковых запросов. Когда вы нажимаете на подсказку, Google выполняет поиск по выбранному запросу.
    Что определяет подсказки
    * Запрос, который вы вводите в строке поиска.
    * Ваши предыдущие поисковые запросы на похожие темы (если вы вошли в свой аккаунт Google и у вас включена история приложений и веб-поиска).
    * Запросы других пользователей. Также учитываются популярные новости Популярные запросы. Они формируются на основе самых актуальных для вашего региона тем и меняются в течение дня. Популярные новости не связаны с вашей историей поиска. Ознакомиться с ними можно на сайте Google Trends.

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


    История включена?
  • За что я не люблю Go
    0
    снимите шапочку из фольги и вбейте `rust undef` (f важна). Если результаты персонально подобраны (вроде как гугл так говорит), то вот автодополнение одно и тоже (без `f` тоже самое у меня).
  • За что я не люблю Go
    0
    image
  • За что я не люблю Go
    0
    у меня ничего не подставляет
  • За что я не люблю Go
    0
    тут недавно был случай внедрения вредоносного кода в зависимость очень популярной js библиотеки.
  • За что я не люблю Go
    0
    Тянуть 51 зависимость ради 5 строк кода — замечательно.
  • За что я не люблю Go
    +1
    Выглядит как отличная библиотека. Я бы заиспользовал. О чем-то таком я и говорил, да

    У нас с вами явно разные предпочтения.

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

    Это был сервис, который достался мне в наследство.
    `viper` использует `gopkg.in/yaml.v2` для парсинга yaml файлов. Я просто взял этот парсер и сам распарсил конфиг файл в структуру (вот как выше qrKot показал, 4 строки). Что тут может быть нестабильного? Потому что мне не нужно > 20 транзитивных зависимостей.
  • За что я не люблю Go
    0
    Есть такая гошная библиотека — github.com/spf13/viper

    Так вот там все — парсинг всех форматов, перезагрузка конфига при изменении и тд.
    Я ее как-то выпилил из одного сервиса — нам нужен был просто парсер yaml и все, так размер бинарника уменьшился с 10 MB до 4MB.
  • Если вы подумываете начать писать на Go, то вот что вам следует знать
    0

    Короче, надо просто добавить капчу в IDE, когда кто-то пытается удалить последнюю строку.

  • Если вы подумываете начать писать на Go, то вот что вам следует знать
    0
    Это создатели Go решили из каких-то своих соображений

    https://github.com/golang/go/issues/23966#issuecomment-377997161


    For example, the hacked-up blog post system I built stores a JSON blob at the top of each file, above the post text, because it was very easy to implement that. But I am sick of needing to leave out the comma after the last key-value pair, because it makes adding a new key-value mean editing the previous one too. This is exactly why we allow trailing commas in Go literals. Those annoyances add up.
  • За что я не люблю Go
    0
    А вы ездите на метро тоже по 8 часов в день?
  • За что я не люблю Go
    0
    Я так и не понял, в чем ваша претензия?
  • За что я не люблю Go
    0
    Подмножеством чего? Максимум есть связи с C. Я когда начал писать на Go, в Rust каждый день изменяли стандартную библиотеку.
  • За что я не люблю Go
    0

    Ок, вы сломали мой мозг — вам не нравится Go, но вам нравится программировать на Go?

  • За что я не люблю Go
    0
    Я, например, пишу в последние полгода на солидити, которые в миллион раз хуже и го, и JS, и всего, что я вообще когда-либо видел. Лучше разве что брейнфака и его вариаций. Но работаю, по причине 1, 2 и 4.

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

  • За что я не люблю Go
    0

    Вам мои скриншоты показать?

  • За что я не люблю Go
    0
    package main
    
    import "libA"
    
    type config struct {
        LibA libA.Config
        ...
    }
    
    func main() {
       var cfg config
       if err := c.loadConfig(*configFile); err != nil {
           log.Fatal(err)
        }
        ...
    } 

    А loadConfig уже парсит конфиг файл и валидирует его в соответствии со структурой.

  • За что я не люблю Go
    0
    А зачем вам отдельный пакет config? Очень часто это просто ненужно.
    Опять же, как я делаю:
    1. В текущем пакет есть структура `Config`.
    2. Структура `Config` содержит конфигурацию все других пакетов.
    3. Все обработка конфиг файла в пакете `main`.

    Если брать ваш случай, то библиотека не должна работать с конфиг файлом (только структуры и их валидация, а не как вы примеры делали с .NET). Если уже есть такое, то при любой ситуации вернуть ошибку. Библиотеки никогда не должны принимать решения, только делегация. Вот и все.
  • За что я не люблю Go
    0
    Я разве написал, что мне что-то не нравится на работе? Работой полностью доволен. А вот чем недоволен — написал в первом предложении.

    Как я понял, программирование на Go является частью вашей работы, если вам это не нравится (программировать на Go) — то вам не нравится ваша работа. Или вам нравится программировать на Go?

    Дайте, пожалуйста, ссылки на посты которые мне необходимо почитать.

    Комменты вот тут
    habr.com/post/422049
    habr.com/post/421411
  • За что я не люблю Go
    0
    Почитайте посты про Go на хабре.

    Я вот считаю так — если вам что-то не нравится на работе, может следует что-то поменять?
  • За что я не люблю Go
    0
    Очень часто забавляет сравнение Go c С, Rust, Python, Java, Pony, C#, Haskell, Erlang, Javascript, etc одновременно. Типа:
    1. Go плохой, потому что в Rust <что-то> сделано лучше.
    2. Go плохой, потому что в Python <что-то> сделано лучше.
    3. Go плохой, потому что в Pony <что-то> сделано лучше.
    4. Go плохой, потому что в Java <что-то> сделано лучше.
    5. Go плохой, потому что в Haskell <что-то> сделано лучше.
  • За что я не люблю Go
    0
    Ну вы же вот прям у себя в коде с match обработали ошибку.
    Я могу точно такой же код на Go написать.
  • За что я не люблю Go
    0

    гугл показывает персональные результаты, я гуглом не пользуюсь, вот сейчас попробовал — rust lang undef дополняется все с растом, undefined — C++.

  • За что я не люблю Go
    0
    у меня совсем другие результаты.

    > А lang кроме го ни один язык не называют, ни тот же С, ни какие-то еще.

    Зачем вы тогда rust lang написали?
  • За что я не люблю Go
    +1
    А объект откуда возмьется?


    С конфиг файла, но тут уже вы решите что делать с нечитаемым файлом или его отсутствием, а не полагаться на разработчика библиотеки (вернет ли он ошибку или панику?).
    Кстати, вот тут ваше мнение расходиться со второй репликой (про прокидование на верх).
    Второе, чем больше библиотек, тем больше конфиг файлов? А потом еще разный формат — один хочет yaml, второй toml, третий ini.
  • За что я не люблю Go
    0
    Ну как это не должна? log4rs, Microsoft.Extensions.Configuration.Json, cfg4j и все прочее

    Ах интерпрайз.
    IMO, библиотека должна работать с конфигурационным объектом, а не файлом.

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

    Я наверное не понял контекст, ну не падайте раз так, WARNING в лог тогда. Для юзер приложений это может и лучше, для backend — лучше падать.
  • Если вы подумываете начать писать на Go, то вот что вам следует знать
    0
    > Я вообще не припомню уязвимости в .net, которые нужно было бы закрывать.

    Идеальный .net.
    Вот java мы недавно апдейтили. У нас просто принято делать апдейты безопасности (даже не критические, критические мы сразу же обновляем) периодически.
  • За что я не люблю Go
    0
    Библиотека не должна принимать как параметр файл с конфигурацией.

    Когда я пишу какой-нибудь сервис, который имеет конфигурационный файл, я делаю следующее:
    1. Создаю дефолтный конфиг.
    2. Если конфиг файл не был определен — использую дефолтный конфиг.
    3. Если конфиг файл определен — читаю конфиг файл и переписываю дефолтный конфиг (тот, что был создан сначала).
    4. Если, когда конфиг файл определен, но что-то идет не так — файла нету, он не читаемый или конфиг не валидный — останавливаю сервис. Тогда упадет только один инстанс, а все другие будут раниться с правильной конфигурацией (пропагация деплоймента остановится).
  • За что я не люблю Go
    0

    только


    if err != nil {
      return err
    }
  • За что я не люблю Go
    0
    Зависит от того, насколько критичен конфиг. Eсли не можете загрузить конфиг, можно использовать дефолтный конфиг и WARN в лог или stderr вывести. Если конфиг критичен — то остановить старт.
  • Если вы подумываете начать писать на Go, то вот что вам следует знать
    0
    Обновлять рантайм — м? В дотнете рантайм не обновляется, если проект сделан под core 2.0, то на нем и запускается всю жизнь, пока лид не решит сделать судьбоносное решение и обновить версию. Что будет сделано путём исправление одного dockerfile. Не вижу, чем должна быть проблема.

    То есть security upgrades не принято делать в .NET?

    Вот не уверен, что компилятор Go быстрее csc.

    Можете протестировать. Но я там еще написал, кроме компилятора.