LINUX.ORG.RU

golang в бизнесе

 ,


0

2

Прочитал пару дней назад учебник по golang, и с первого взгляда вроде норм язык. Но часто слышу его обсирание(сложно в бизнес логику). Собственно вопрос что не так с Go, кроме того что там нету enum-ов и generic? Я так понимаю проблемы с батарейками?


Ответ на: комментарий от Int0l

это enum через const и generic через type interface?

Первое да (iota; хотя что такого сакрального в enum).

Второе: во-первых, встроенные структуры данных уже generic; во-вторых, при помощи библиотек можно писать обобщённый код, не отличающийся от «родного»:

type <T> generic.Type

type <T>Queue struct {
    items []<T>
}

func New<T>Queue() *<T>Queue {
    return &<T>Queue{items: make([]<T>, 0)}
}

func (q *<T>Queue) Push(item <T>) {
    q.items = append(q.items, item)
}

func (q *<T>Queue) Pop() <T> {
    item := q.items[0]
    q.items = q.items[1:]
    return item
}

(подробнее см. библиотеку genny)

hbee ★★★ ()

Но часто слышу его обсирание

на ЛОРе есть место «обсиранию» чего угодно, не ведись на мнение поехавших утят, лучше сам попробуй и определи комфортно ли тебе с ним.

Dred ★★★★★ ()
Ответ на: комментарий от hbee

при помощи библиотек можно писать обобщённый код, не отличающийся от «родного»:

Который нахрен никому не нужен, ибо не в стандарте языка = 100500 библиотек несовместимых друг с другом.

no-such-file ★★★★★ ()

Собственно вопрос что не так с Go

Go создан Google, для нужд Google. Какой бизнес имеет такие же нужды?

Надо просто обладать здравым смыслом.

dem ()
Ответ на: комментарий от dnb

Хоспаде. Ты еще покажи сколько народу используют MS Office чтоб ТОЛЬКО приказы по фирме рассылать (можно подумать приказ НЕЛЬЯЗ напечатать в тандерберде или аутлуке даже - нееет у нас будет 1 письмо в котором будет тема ПРИКАЗ и ВЛОЖЕНИЕ)....

Дураки правят обществом иначе iPhone не был бы так популярен....

dem ()

Но часто слышу его обсирание(сложно в бизнес логику).

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

Адекватную критику нужно искать не в рунете.

Anakros ★★★★★ ()
Ответ на: комментарий от no-such-file

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

dem ()
Ответ на: комментарий от Int0l

Приплыли. Латентность лучше у синхронных алгоритмов. Смотри сравнение по латентности у aiohttp и django

Любой асинхрон по латентности хуже.

А теперь давай вот два юзкейса. Средняя контора и Гугл.

Рассмотрим например GMAIL. Пусть у нас есть несколько эндпоинтов. 1) Запрос конфига. 2) запрос списка писем 3) запрос списка контактов.

Все они идут ну почти параллельно с страницы.

Твой юзкейс. 1 машина где в докере СУБД где данные, во втором контейнере сервис что отдает конфиг, в третьем сервис который отдает список писем.

Юзкейс гугла. 1 машина где СУБД где данные (нет Докера). 2 машина где сервис что отдает конфиг 3 машина где сервис который отдает список писем.

А теперь привет k8s и прочее.. Мониторинг показывает, что 3-й сервис дает большую нагрузку. Запускается еще 1 машина. Там голы Linux и 1 сервис. Докер Гуглу не нужен это их машины. В датацентре там сотни этих 1 2 3 и каждый балансируется. Снизилась нагрузка - его стопанули.

Балы статья гугла где они объясняли, что при сбое FS они не чекают машину, они ее останавливают и накатывают голую. У них 80 копий данных только в 1 датацентре...

Теперь понятно почему у ГО 1 бинарь? Ты уже потерял в памяти имея 3 рантайма в памяти. А они?

dem ()
Ответ на: комментарий от Int0l

Да. А теперь вспоминаем причины по которым нет препроцессора в Java и там нет перегрузки функций.

Макросы это прекрасный способ запутать все к едрене фене. В Го кодогенерация это святая святых...

Но ты еще про юзкейсы не сказал. Смотри ты знаешь что такое amazon lambda?

dem ()
Ответ на: комментарий от dem

читал про сборку мусора в GO и там ее подкрутили что-бы время ее работы было минимальным(типа чаще но маленькими кусочками), в ущерб всему остальному, и это типа что-бы не было задержек -> лучше латентность

Int0l ()
Последнее исправление: Int0l (всего исправлений: 1)
Ответ на: комментарий от Int0l

Это тут непричем. Синхронность это когда пришлел запрос - ты полез в БД, далее что то обсчитал, полез на УРЛ какойнибудь, рассчитал и отослал ответ.

Возможно это в несколько потоков и или процессов.

Асинхронность это когда пришлел запрос - ты полез в БД поставив на паузу текущую операцию пока она не выполнилась и ждешь следующий запрос

Запрос пришел ты снова полез в БД

Пришел первый ответ далее что то обсчитал, полез на УРЛ какойнибудь поставив на паузу текущую операцию пока она не выполнилась и ждешь следующий запрос

А тут пришел ответ от БД второй операции и ты начал рассчет, но ответ от УРЛ первой вот на половине рассчета пришел, а ты считаешь первую

И так далее. Тоесть БД тебе ответила, а ты занят другими. Как девушка в библиотеке.

Представь 10 клиентов и 10 девушек. Каждая берет у тебя 1 карточку и идет искать книжку. Но как она вернется ты получишь ответ. Вот латентность.

А если клиентов 3, то девушки тупят. А если сто, то очередь.

А 1 девушка и 10 запросов. Она собрала 10 карточек и пока она все 10 не соберет все ждут, даже если 1-ю книгу нашла вот прям у входа.

dem ()
Ответ на: комментарий от Int0l

Слово Облако забудь. Это 10000 млн компов и биллинг. Надо тебе обработать 10 килобайт то твой код будет развернут на 1 компе и обработает. Нато 1 террабайт твой код автоматом будет развернут на 1 млн компьютеров и они пукнут паралельно...

Так использует Го в гугле. Там нет никаких докеров (виртуалки там). Они тупо просто форматируют (нет - там хранилище) нужное число компов накатывают твой код запускают и т.д. Вот откуда взялся k8s

dem ()

The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt.

Сам решай, проблема это или нет.

P.S. Кстати, полиморфизм в го есть, пусть и немного не такой, к которому все привыкли - https://www.reddit.com/r/ProgrammerHumor/comments/6l647l

Laz ★★★★ ()

Почему го такой?

Вот статья почему го спроектирован так как есть, со всеми + - и прочими компромисами - https://talks.golang.org/2012/splash.article. - скорость компиляции (за счёт модели депенденси и простаты синтаксиса) - хорошая масштабируемость (модель асинхронщины) - низкий порог вхождения етс.

DukeNukem ()

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

DukeNukem ()

Ну да, без enum хреновато, но оно легко заменяется каким-нибудь map[string]struct{} + есть библиотеки, которые от тебя скроют это шаманство. На мой взгляд большая проблема, это то что нет исключений. Все ошибки ты должен пробрасывать изнутри и делать обертку, иначе потеряешь реальную точку ее возврата. Дженериков нет и из-за этого приходиться иногда применять иные модели построения связей, но проблема не так сильно сказывается как может показаться.

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

deterok ★★★★★ ()
Ответ на: комментарий от anonymous

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

Это не проблема, а чуть ли не самое главное преимущество!

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

realloc ★★★★ ()
Ответ на: комментарий от deterok

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

Ты ошибаешься. От исключений больше вреда, чем пользы (и намного). Почитай, например: https://www.joelonsoftware.com/2003/10/13/13

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

hbee ★★★ ()