Это копия, сохраненная 10 февраля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Для вката в Go читай Донован, Керниган "Язык программирования Go", https://www.golang-book.com/, книги из списка https://github.com/dariubs/GoBooks, а также смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
Пэкеджи можно искать тут https://github.com/avelino/awesome-go
Живем в ожидании Go2, пробрасываем ошибки, смеемся над джавистами, которые не могут жить без ексепшенов, дженериков и размазанной бизнес-логики.
Предыдущий: >>1452808 (OP)
Предлагаешь клиенту просто отслеживать статус задачи? Чтобы в случае ошибки он мог об этом узнать и повторить запрос/забить хуй? Я правильно тебе понимаю?
> смеемся над джавистами, которые не могут жить без ексепшенов, дженериков и размазанной бизнес-логики.
Скоро джависты будут смеяться, когда разрабы Go окончательно прогнутся под сообщество и превратят Go в кресты но зато Go хотя бы пошустрее жабы
Недавно попал в ситуацию, которую я не смог решить основываясь на цифрах. Но все решилось методом тыка.
Докер контейнер на ecs, метрики все отличные - памяти и процессора хватает с избытком. База данных не тормозит.
Но время ответа периодически жуткое - по 2 минуты, при 95 перцентиле около 20 мс.
Вот как бы вы решали?
Ты не очень умненький да?
Все завис от доменной области.
Если это сохранение документа после редактирования, клиент должен знать, да?
Если это работа с кэшем и кэш отвалился, то знать ему не положено да?
Но во всех случаях эти таски не должны работать в системных потоках/процессах бизнес логики.
>но зато Go хотя бы пошустрее жабы
Ох лол, откуда эта байка идёт?
Как раз великий фейл го в том, что он тормознутее прогретой жабы оказался.
Какое же c++ говно, не зря жаву учил
даун.
1. го - говно язык.
2. гнаться за скоростью - ты ебанутый?
3. все равно попадешь на легаси говно проект
4. го абстраргируют под другие задачи.
5. Самые быстрые части, твич и тому подобное - написаны на плюсах.
А теперь съеби.
С++ юзают там где нельзя сваливаться в GC. Писать на сях что-то крупное, это боль.
И да, у ламеров какой-то дроч на скорость, они верят что это им что-то дает. Писать "быстро" надо еще уметь, даже на быстром языке, тот сайт тому доказательство (внизу можно найти топ языки, в том числе и с++ и жабу со спрингом, лол)
Тут скорее речь о том, что гошу выставят на мороз, если он будет и дальше просирать текущим топовым языкам.
GO ONE LOVE
> Лёгкий синтаксис
Поимитивный синтаксис, на любое нетривиальное действие приходится писать десятки строк кода, потому что нужные конструкции просто отсутствуют в языке. Привет от сишки.
>Произошла ошибка, а клиент думает что все ок, но видит некорректный результат (или вообще ничего не видит). Чистая магия, которая противоречит юзабельности.
Тогда нахуя ты это высрал, долбоеб? Я тебя только за эту хуйню спрашивал, а оказалось, что ты ничего не можешь предложить лучше
> от доменной области
Иди лучше, блять, русский подучи, каждый раз ловлю фейспалм с твоих простыней говна
>Go is a better Java / C#, while Rust is not. The clarity that Go can bring to enterprise software development is without a doubt much more valuable than removing garbage collection at the cost of worsening the overall productivity.
Где вас такой херней кормят?
Когда человек обосрался по обсуждаемой теме, он начинает придираться к личности, к орфографии и т.д.
С тобой все ясно было еще в том треде, когда ты стал маня-архитектуру на коленке описывать.
Мальчики, не ругайтесь.
Есть два подхода - пессимистичный и оптимистичный.
С оптимистичным мы сразу показываем результат готовым (а потом можем откатить визуальщину), с пессимистичным только когда все точно готово.
Выбор зависит от того, насколько критичная операция.
Все остальное - мелочи реализации. Если вам что-то кажется нереализуемым/сложным/etc - гуглите или спрашивайте. Все реализуемо.
Врывается в диалог двух анонов.
@
Без ремарок ведет диалог как бы от второго анона
@
Называет собеседника шизиком.
Анон говорит, что большинству местных анонов асинхронщина не нужна.
@
Другой анон, оспаривает, говорит про веб
@
У него спрашивает где и как конкретно.
@
Тот высирает придуманный на коленке ответ, не используемый в реальных приложениях, сложнее домашнего пет-проекта.
@
Его ловят на этом.
@
Анон понял что обосрался, начал маневрировать, говорить с позиции второго анона, придумывать что он мимокродил и прочее.
И что получилось.
Вместо того чтобы пойди почитать по матчасти и тихо слиться, ибо это анонимный форум и всем насрать, анон засрал полтреда маневрами.
>Врывается в диалог двух анонов.
И?
>Без ремарок ведет диалог как бы от второго анона
Ещё один долбоеб. Можешь перечитать историю сообщений, я раза три отчётливо пытаюсь донести суть своего вопроса и указываю на то что я другой анон прошу пояснить за эту хуйню
>Произошла ошибка, а клиент думает что все ок, но видит некорректный результат (или вообще ничего не видит). Чистая магия, которая противоречит юзабельности.
В итоге чувак мне все разы отвечает, что я не должен запускать таски в потоке с бизнес-логикой
Ну кста по поводу асинхронности тот чувак ещё большую хуйню спизданул. Охуенно рассуждать о том что асинхронность не нужна и как бы ты все проблемы решил микросервисом на го, в то время как у тебя в 99% случаев каждый запрос сервится отдельной горутиной
>сервится отдельной горутиной
Еще одна жертва хайпа. Ну есть у тебя 100.000 горутин, а толку если они в четырёх физических потоках?
Подвесил ты один поток, одной горутиной и ~25.000 горутин сосут.
Как там Го, пасаны?
>Подвесил ты один поток, одной горутиной и ~25.000 горутин сосут.
Днина, ты? Есть же нетворк поллер.
Бля, да все же знают, что если поток локируется, то рантайм создаёт ещё один.
нихера,там именно проствя страница
На дваче.
>Как она узнает что поток блокирован? Это же не бесплатно
Очевидно потому что поток блокируется системным вызовом.
>То есть, при дидос атаке, будут еще неконтролируемо треды создаваться?
Нет, нетворк коллы обслуживаются одним тредом через асинк сисколлы.
Рантайм понимает что будет блокирующий вызов и берет из пула свободный тред, или создаёт новый.
>Почему одним тредом, когда у тебя много ядер?
че ты за хуйню пишеш нахуй лезиш если не шариш иди пару статей почитай
Так я и спрашиваю, тормоз.
>иди пару статей почитай
Прочитал пару статей в мужском журнале, до сих пор не понял, не работает это.
Привет, двач. Есть у кого на примете годный курс лекций по алгоритмам? Знаю, что библией алгоритмизации считается книга Кормэна(потом по нисходящей идут Дасгупта и Бхагарва, тоже знаю) и мне нравится её полнота, однако, формальный язык очень и очень отталкивает, не способствуя пониманию. Да и вообще, формат лекций мне как-то ближе, нежели просто чтение книги. В общем, какие требования? Полнота(речь не об N-полноте, лол) Кормэна в сочетании с интересным, не сухоформально рассказывающим преподом. А, да, и чтобы на русском(знаю, что охуел). Подскажите чего по сабжу?
>Почему одним тредом, когда у тебя много ядер?
>Какой-то node.js прям получается.
Потому что нетворкполлер работает через асинхронные системные вызовы. Одного треба видимо посчитали, что хватит.
>Это в го или какой-то системный драйвер?
В го есть два вида i/o Нетворк и ненетворк(файлы/другиесисколы/хуемое). Так вот все не нетворк сисколлы блокируют поток, поэтому планировщик го имеет пул потоков и умеет создавать новые. Когда происходит блокировка, планировщик подменяет заблокированный тред на тред из пула или новый. При разблокировке тред возвращается в пул.
Для Нетворк i/o в рантайме есть отдельный поток, так называемый Нетворк поллер. Данный механизм в одном потоке имеет очередь горутин, которые хотят сделать Нетворк i/o. Вместо обычных блокирующих системных вызовов используется семейство асинхронных сисколлов ОС. Таким образом все горутины в данном потоке могут работать с сетью, не блокируя поток при этом. Ка столько результат вызова получен, горутины возвращается в очередь к планировщику го.
trace посмотри
Есть ли курсы/книги, где идёт разбор на практике?
Есть ли смысл использовать TLS/SSL при взаимодействии между сервисами которые крутятся в кубере и не смотрят наружу?
Если ответ будет с аргументацией, то вообще отлично.
Случайно нажал "ответить"
>Блин, как научиться заумным вещам вроде cqrs es, паттернам, вроде саг? И другим вещам, которые стоят в списке требований в проектах на микросервисах?
>Есть ли курсы/книги, где идёт разбор на практике?
microservices.io
>Есть ли смысл использовать TLS/SSL при взаимодействии между сервисами которые крутятся в кубере и не смотрят наружу?
Зачем вообще используют TLS/SSL? В основном, наверное, чтобы прятать траффик от MitM. Если у тебя в кластере кубернетеса находится негодяй, то, боюсь, MitM это наименьшая из проблем. Плюс внутри кластера же все должно быстро работать, надо минимизировать latency. А так у тебя в цепочке появляется лишний запрос, это невыгодно.
А, ещё книга Building microservices Ньюмена
>Given non-empty array nums of integers, return an array output such that output is equal to the product of all the elements of nums except nums.
Example:
Input: [1,2,3,4]
Output: [24,12,8,6]
Why?
output[0] = 234 = 24
output[1] = 134 = 12
output[2] = 124 = 8
output[3] = 123 = 6
Задачу решил (https://pastebin.com/ujrnMJB6), но возник вопрос - какой идеологически верный способ смержить два слайса (т.е. создать слайс, состоящий сначала из айтемов первого, а затем второго слайса)?
С одной стороны, append(after, before...) работает нормально, но если поменять слайсы местами - все сломаеться нахуй.
Очевидно, что тут дело в том, как именно брать слайс от слайса/массива, верояно тут дело в том, происходит ли алокация иннер аррея при взятии слайса.
С другой же, в случае с append(append([]int{}, before...), after...) наплевать на месторасположение аргументов, что намного более ошибкоустойчево, но выглядит как говно из жопы.
На какой из стульев сесть?
А зачем тебе каждый раз делать аппенд?
Не проще ли черз двойной цикл
где будет
if j!= i {
result*=input[j]
?
бля епта, установил себе этот го а дальше что??? как писать код? Я даже не могу хелло.го запустить, как вообще это работает?
готур хуяч и не выебывайся
*lambda expressions
А разве этого нет в первой версии? В Go есть же анонимные функции, не?
Наверное, имеются в виду однострочные функции без слова func и без фигурных скобок. Типа такого:
((a, b) -> a + b)(1, 2)
Просто синтаксический сахар короч в JS стрелочные функции хотя бы имеют смысл: они берут this из внешнего скопа, а не тот который им забиндили или global как в обычных function expressions
Да любые новые фичи в языках программирования поверх команд ассемблера - это синтаксический сахар. Они не добавляют ничего, что принципиально нельзя сделать без них.
> Да любые новые фичи в языках программирования поверх команд ассемблера - это синтаксический сахар
> синтаксический сахар
Значение знаешь?
Про то что стрелочные функции в Go 2 - просто синтаксический сахар, я ошибся: стрелочные функции возвращают значение выражения, которое записано после стрелки. Так что они отличаются и семантически от обычных анонимных функций.
Синтаксическим сахаром стрелочные функции были бы если бы без return statement они не возвращали значение
Бесполезный сахар. Лямбды нужны были джаве, так как их не было, джсу, потому что всех заебал this.
В го уже есть все необходимое, непонятно зачем нужна ещё одна запись для функций
А Python зачем нужны тогда лямбда-функции, если контекст может быть только у функций класса?
Короче есть один веб скраппер и у него есть следующий стракт
type WebApi struct {
Api IApi
Database db.Database
}
У стракта есть поле Api, которое интерфейс для различных апих. У интерфейса должен быть метод Api.GetMappings()
Далее есть метод New(), который возвращает инициализированный
func New(apiProvider string, dbConf string) (WebApi, error){
...
provider = new(SomeApi) // SomeApi это тоже стракт с методами под конкретную апиху
...
return &WebApi{provider, dbase}, nil
}
Затем где-то в коде идёт вызов
...
mapp, err := web.Api.GetMappings(target)
...
который моментально вызывает панику следующего содержания
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x98a819]
Чё я не так сделал то?
Короче есть один веб скраппер и у него есть следующий стракт
type WebApi struct {
Api IApi
Database db.Database
}
У стракта есть поле Api, которое интерфейс для различных апих. У интерфейса должен быть метод Api.GetMappings()
Далее есть метод New(), который возвращает инициализированный
func New(apiProvider string, dbConf string) (WebApi, error){
...
provider = new(SomeApi) // SomeApi это тоже стракт с методами под конкретную апиху
...
return &WebApi{provider, dbase}, nil
}
Затем где-то в коде идёт вызов
...
mapp, err := web.Api.GetMappings(target)
...
который моментально вызывает панику следующего содержания
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x98a819]
Чё я не так сделал то?
АХХАХАХААХАХАХААХАХАХАХАХАХААХАХАХААХАХАХААХАХАХАХААХАХАХАХАХАХАХАХАХАХАХАХАХАХАХААХАХАХААХАХАХАХАХАХАХпошел нахуй чмо ебаное
Не ну серьзно. Я чета не могу самостоятельно понять в чём проблема.
Единственное чё нагуглил это вот
https://yourbasic.org/golang/gotcha-nil-pointer-dereference/
Но у меня всё так и есть вроде. Или мне надо как-то
(*WebApi).Api по новой определять или почему на него ссылка проёбывается?
Типа вот в методе New, я возвращаю готовый поинтер на WebApi
&WebApi{provider, dbase}
Вот provider тут как раз и есть это .Api, которое крашится при вызове.
Провайдер это provider = &SomeApi{}
Надеюсь в этот раз понятней объяснил.
Нихуя не понятнее.
Почем нам знать, чо за хуйня под капотом?
Ошибка ясна? Ясна.
Садись за дебаггер и исследуй поток исполнения, пока не найдешь. где объебался.
Очевидно, что за один проход найти произведение product, а потом за второй заполнить out = product/in
WebApi - конкретный тип struct, func New возвращает WebApi, но return ты делаешь &WebApi, т.е. указатель. При этом ты утверждаешь, что сумел это скомпилировать, раз словил ошибку в рантайме. Какая-то черепашка пиздит
ты прав, обработать этот случай, но всё ещё не повод для сложности выше линейной.
Да не, это вакаба съела звёздочку просто.
А проблемой я вчера разобрался частично.
На самом деле прав был этот анон >>487389.
web.Api у меня было тупо nil'ом, тк инициализация происходила в init(), и умпешной не являлось. Только у меня там было почемуто написано fmt.Sprintf() вместо Println, поэтому ошибку я тупо не видел.
Короче я сам тупик ещё тот.
Аноны, сам уже во всем разобрался, можете не помогать.
>>487663
>к инициализация происходила в init(), и умпешной не являлось.
Я в таких случаях паникую, и мне похуй, что это вне main(). Ну, типо, если приложение ожидает инициализированные инстансы всякой хуйни, а там тупо nil'ы, то оно уподет все равно, но ты больше времени потратишь на поиски причины. Только с точки зрения суппортинга всего этого говна.
>Если ваши байт-слайсы содержат секретные данные (криптографические хеши, токены и т. д.), которые нужно сравнивать с предоставленной пользователями информацией, обойдитесь без reflect.DeepEqual(), bytes.Equal() или bytes.Compare(). Эти функции сделают приложение уязвимым к атакам по времени. Чтобы избежать утечки информации о времени, используйте функции из пакета crypto/subtle (например, subtle.ConstantTimeCompare()).
Нихуя не понял, объясните, пожалуйста, для медленных.
источник: https://habr.com/ru/company/mailru/blog/314804/#39
Очевидно, что bytes.Equal для массива в 10 символов выполняется быстрее, чем для массива в 1000 символов. А значит, зная скорость выполнения функции можно оценить длину данных ( и иногда состав данных, типа есть ли там большое количество нулевых байтов и тд).
Чтобы этого избежать, есть специальные функции сравнения, которые работают одинаковое время для данных разной длины.
>Чтобы этого избежать, есть специальные функции сравнения, которые работают одинаковое время для данных разной длины.
Это основано на хитровыебанных хешах? Или как?
Самое простое (скорее всего реально сделано умнее) - всегда возвращать ответ через 0.1 секунды, неважно, сколько времени реально ушло.
Ну типа:
t := timer.start()
h := calculateHash()
t2 := t.stop()
if t2 < 0.1 { time.Sleep(0.1-t2)}
return h
>всегда возвращать ответ через 0.1 секунды
Я то думал там какие-то хитровыебанные О(1) алгоритмы.
Я хз, если интересно - посмотри и разберись. Пример с таймером я сам придумал.
Тебе же сказали уже, взять можешь. Но хэш от AAA и хэш от AAAAAAAAAAAA будет браться разное время, как и от AAA и ABC. В итоге, человек, замеряющий время, которое выполняются запросы на (к примеру) POST /password с разными паролями сможет довольно точно предсказывать, сколько и чего лежит в пароле. В итоге можно перебирать не все радужные таблицы а только часть.
Никто не будет заниматься таким мозгоёбством ради твоего занюханного самописного бложека, это правда. Но ради банка или гуглоаккаунта крупной компании - запросто.
Авторитетные программисты из России? Лол.
Мне всегда казалось, что русскоязычные разработчики хорошо разрабатывают, но плохо пиарятся, а европейцы пишут чаще пишут говнокод, но зато коллективно дрочат пиарятся на конфах, в блогах и прочих твиттерах. В итоге авторитет у них, так как о них больше слышно.
Оффтопик, но меня всегда бесило, что девяносто девять процентов контента какого-нибудь медиума или конфы - это вольный пересказ мануалов из официальных источников. И под каждым найдётся несколько англоязычных комментариев вида "очень круто, так держать!". Какой смысл хвалить халтуру, там нет ничего интересного. Лучше уж токсично заунижать чем засорять свои интернеты копроконтентом.
Но вообще, по-моему гошный рейс-детектор, сборщик мусора и golangcimetalint (вроде) написаны разработчиками из России, можешь погуглить, как их зовут.
Вопрос: как убрать из справки эту инфу о типе string, чтобы осталось только название флага и заданное мной его описание? Мне нужен вид как для flag.Bool().
Автодополнялка gocode - тоже.
Бляха-муха, посмотрел на картинку франкенштейна-гофера, и так расстроился, что чуть не заплакал. Ну вот нахуя они это делают?
Всмысле? Был максимальной примитивный недопаскаль с корутинами, стало - все ещё жутко примитивный, но хотя бы соотвествующий современному вчерашнему мейнстриму говноязык, который теперь сможет по возможностям соревноваться аж с пехепе и тайпскриптом.
> теперь сможет по возможностям соревноваться аж с пехепе и
В пехепе есть встроенные функции для того, что в говне пишется в тридать строк кода.
Очень просто, большинство людей (в том числе и разработчиков) довольно глупы и не способны сравнивать вещи объективно.
Соответственно, если в одном языке есть (к примеру) миксины, а в другом - нет, то это значит, что первый язык лучше. Ну и мейнстрим, все дела.
Не говоря уже о том, что если ты долго разрабатывал на языке А, то ты привыкаешь мыслить в его логике и концептуально другой язык Б кажется тебе необычно неестественно мерзким.
Ну и ещё разработчики - очень токсичный народец, который любит поунижать разработчиков на других технологиях, по любому поводу.
Спасибо. Я понял, Go нужен чтобы писать простые вещи в больше строк кода. Только не надо сравнивать с сишкой, сами же понимаете, что не та сфера применения.
Ну давай разберём по частям, мною написанное по схеме с StoutPipe.
c1 := exec.Command("hostnamectl")
c2 := exec.Command("grep", "Operating System")
c2.Stdin, _ = c1.StdoutPipe()
c2.Stdout = os.Stdout
_ = c2.Start()
_ = c1.Run()
_ = c2.Wait()
Именно так оно работает. Я конечно понимаю, что могло быть хуже, но почему сначала c2.Start(), а потом c1.Run()?
Очевидно потому что сначала надо включить ту часть пайпа, которая принимает данные (с2) а потом уже сами данные начать отправлять (с1)
Да уж, вот тут не могу поспорить. Подумаешь, пишу if err != nil, но зато не пишу на Java. А что теперь, сделают клон Java? :(
Bash
Хз, я довольно легко нашёл работу, даже в моём мухосранске.
Плюс, в линкедине меня периодически пытаются захантить с релокацией в Москву или ещё куда.
Но конечно на Java и говноскрипте будет больше работы, в ближайшие лет десять, нет смысла этого отрицать.
Товарищи суслики. Очень нужна ваша помощь. Пишу небольшую прослойку между двумя протоколами. Один из них gRPC. Дело в том, что сервер grpc не наш, а партнёров. Они дегенераты редкие и их документацией подтереться можно, разве что.
Собственно, к проблеме. Мне выдали сертификаты и прото-файл. Дело в том, что у меня не получается даже подключиться к их апи.
rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: authentication handshake failed: remote error: tls: handshake failure"
Подкидываю сертификаты к подключению и их токен кастомным заголовком. Ни в какую. ЧЯНТД?
Всё, отбой. Разобрался. Если кому интересно будет, расскажу в чём проблема была.
>>499119
Проблема была в сертификатах, я их скинул в одну кучу, и думал, что как и с https проканает ключ к апи сначала получается на сервере аутентификации. Но нет. Пик 1. Делаем CertPool с одним единственным са-сертификатом и делаем отдельный сертификат из непосредственно сертификата и подписи. Потом создаём креды TLS и указываем полученные сертификаты в своих полях.
Так и завелось.
Ну не стукайте, всеж мы люди
Второй пик отклеился
Ну и причём здесь го? Картинка смешная, но это про кубернетес.
Если ты запостил это в тему того, что кубернетес "такой плохой", потому что написан на го, то:
- Он написан на го джавистами, которые написали джавоговно на го, отсюда и самопальные дженерики и неадекватная структура в коде кубов;
- Столько мемов про кубы не потому, что они плохо написаны, а потому, что это очень сложная (в смысле complex, а не hard) технология, которую нужно понимать и уметь правильно готовить.
>Если ты запостил это в тему того, что кубернетес "такой плохой", потому что написан на го
Нет, просто я только в этом треде на бордах сижу. Никакой агрессии я не нес.
>- Он написан на го джавистами, которые написали джавоговно на го, отсюда и самопальные дженерики и неадекватная структура в коде кубов;
Про это вообще не знал, я из всего кода только мейкфайлы листал. И то только ради праздного интереса.
>- Столько мемов про кубы не потому, что они плохо написаны, а потому, что это очень сложная (в смысле complex, а не hard) технология, которую нужно понимать и уметь правильно готовить.
Именно об этом и картинка
Идет как почти первый язык.до этого изучал немного изучал си,ну так,пару книг(собственно поэтому к голангу и присмотрелся,синтаксис похож сильно и приятен глазу
Можете отговорить/одобрить это дело?Пока прошел только готур и вроде норм
Посмотри на количество и качество вакансий в своем городе. Достаточно ли их? Есть ли вакансии для новичка без опыта в принципе?
Сам из москвы,думаю с вакансиями тут проблем особо не будет надеюсь.Просто на днях наткнулся на мысль что сишка это конечно очень здорово,быстро там,можно много чего веселого писать,но работу я хуй найду на нее(если смотреть на вакансии то там нужны люди с опытом 10+ лет и знаниям системы на уровне руссиновича).Собственно из-за этого и встал выбор что теперь учить
Го - вполне хороший язык для новичка, но у него действительно не так много вакансий по сравнению с джавой, и вряд ли среди них много новичковых.
Но в Москве скорее всего проблем не будет.
Единственное, я бы тебе не рекомендовал останавливаться только на го, в свободное время обязательно возьми изучи хотя бы базовый курс фронтенда и что-то более классическое вроде тех же С++ или там Java, чтобы разбираться в ООП и классических реализациях паттернов (я советую это новичка в независимости от того, какой язык они хотят учить, хоть питон, хоть го, хоть пхп).
Сами вебсокеты - на изичах, пакет gorilla/websocket, если не путаю. Но обычно проблема в протоколах поверх сокетов, там целая пачка задач вида подтверждения получения запросов, подписок, избавления от дубликатов и так далее. Так что вариант "написания самому" лучше приберечь под конец (если это не пет-проект, конечно же).
На ноде я бы взял socket.io, но он, к сожалению, на го имеет крайне посредственные реализации.
Вроде бы, сейчас наиболее приличный пакет для этого - это centrifuge или centrifugo (не помню, кто из этих двоих), сам я его не юзал.
Ну и в го хорошо работает grpc, который вполне себе замена вебсокетам.
еще вопрос,я ведь нуб
на го можно запилить еще регистрацию,доступ к БД,или ну его нах,и реализовать это на пхпа го оставить сокеты и немного логики для работы с юзерами?
короче,нужен легкий фреймворк,к которому можно подключить пакеты(наверно это у вас так называется)
На го нет единого фреймворка-комбайна, как в php. На го принято собирать свой проект по частям из мини-библиотек.
Всё, что ты хочешь, на го сделать можно, и довольно легко - ищи подходящие библиотеки (ищи в awesome-go) и используй.
Выбор между "сделать только на го" и "сделать часть на го, часть на пыхе" однозначно сделать сложно. Лично я бы сделал вообще всё на го. Но если у тебя больше скиллов в php - то можешь оставить го в качестве эдакого "сокет гейтвея", почему бы и нет.
Фу.
Я именно это и написал. Сайт - это набор механизмов: веб-сервер, роутинг, работа с бд и т.п. Иногда эти механизмы дают тебе сразу в комплекте, как какой-нибудь Laravel. В го подход другой.
>>500278
Многопоточность в го реализована не "на синтаксисе", а является частью самого го, так что да, с ней легче работать. И да, это хорошо.
>а является частью самого го
А на тех языках это отдельная либа чтоли? Тоже часть базового пакета.
Или ты про то, что любая прога Го будет дефолтно многопоточна, а уж пользоваться им или нет решать тебе ?
Нет, потому что на "подключение библиотек" нет стандартов, ни в одном из языков, что я видел. Это довольно тривиально, на самом деле, обычная работа с кодом. Как правило, в любом нормальном пакете есть примеры, как с ним работать.
Вся соль в том, чтобы правильно выстроить приложение из этих библиотек - и тут каждый действует на свой вкус и знания (большинство пишут говно, конечно).
Если ты новичок - то тебе определённо будет легче максимум работы выполнять в рамках фреймворка, гугля любой вопрос в стиле "how to do ... in Laravel". Где-то года через 2-3 при определённой удаче начнёшь разбираться, как в принципе стоит выстраивать архитектуру приложений.
Потому что тупо треды - это низкоуровневая хуита без какой либо модели, и ты гарантировано с ними насосёшься если их будет больше трёх.То что Thread это типа класс - это вообще отдельная хохма, ведь тред != объект, как минимум потому что у них разное время жизни.
Короче именно из-за джявы с Thread возник миф что concurrency is hard. Это при том что есть языки типа Erlang и Go, где concurrency is easy.
К счастью, сегодня уже все чуть лучше, ведь есть Akka, которую даже в сисярп портировали. С другой стороны, любая привнесённая извне надстройка всегда хуже, чем если язык изначально задизайнен с этой фичей и она напрямую поддерживается платформой.
Да, если сравнивать го с php или тем же node.js, то ключевая разница будет в том, что php по умолчанию однопоточен, сам твой код запускается уже в рамках одного потока обработки запроса. По сути, веб-сервер создаёт поток, в котором уже запускается твой код. Пхп иногда надстраивают до ассинхронной работы (это не равно многопоточности, ты можешь погуглить разницу между этими двумя вещами) внешними расширениями, но я это воспринимаю скорее как извращения, потому что пхп изначально задизайнен так, чтобы выполнять всё в одном потоке, синхронно.
Го в отличие от пхп многопоточен по умолчанию, веб-сервер уже заранее встроен в сам го и на каждый запрос го запустит легковесный виртуальный поток, в котором вызовет твою функцию.
Го эффективнее утилизирует ресурсы системы, да. А ещё он компилируемый и более низкоуровневый. Поэтому с точки зрения производительности он бесспорно эффективнее.
Но с точки зрения поиска работы нода скорее всего популярнее.
Смотри сам, что для тебя является "лучше",
Го достаточно взрослый для того, чтобы библиотеки закрывали всё или почти всё, что нужно. Я за три года, что пишу на го, практически ни разу не сталкивался с тем, что чего-то нет.
Бывает, что написано не так, как мне бы хотелось, это да - но это не гошный эксклюзив.
Если я понял, то с php ты уже на каком-то уровне знаком. Это достаточно хороший язык с достаточно качественной экосистемой, чтобы иметь возможность сделать на нём что угодно за малым исключением. Поэтому я тебе рекомендую максимально делать на нём. То, что он не может (по сути, только вебсокеты) вынеси в го или ноду, только не усложняй. В ноду тебе скорее всего будет даже проще, кстати, потому что ты можешь взять socket.io (библиотека такая) и на сервере, и на клиенте и минимизировать свои усилия.
те для прототипирования
>из-за джявы с Thread возник миф что concurrency is hard.
Ну как бы треады там в 95 году появились, вот и хард. А гошке сколько лет.
А как обстоят дела с синхронизацией потоков? Когда два метода например обращаются к одному и тому же объекту?
ну getBalance() и makeDeposit() одновременно
В двух словах, память общая, так что может быть конфуз. Решается правильным структурированием программы и примитивами из пакета sync.
Проходи tour of go, там всё есть.
Мне нравится.
Да.
Без фанатизма
этот бенч хуйня полная, ты исходники бы хоть посмотрел перед тем как сюда это говно тащить. его проекты не имеют ни какого отношения к реальным, это просто сборище костылей и хаков, вплоть до отчати статичного буфера с хэллоу вордом. реальность такова - что жаба тормозное говно, а на расте писать очень дорого.
аутист, бенч реал приложух это бенч, внезапно, реальных приложух. возьми аналогичные приложухи и сравнивай, например жабовский zk против гошного etcd, жабовский zuul против гошного traefik итд. только никакой интриги не будет - жаба это отсос и увеличенное потребление памяти.
хватит,щас многие проэкты переписывают с руби на элик или пишут сразу с нуля
увы, но он не ровня го. т.к. сосёт на cpu задачах, там годный ио и конкаренси, но эликсир сам по себе как и эрланг довольно тормозной язык.
относительно го-да,но в отношении большинства-даст просраться
Пидорасы надоели, которые привыкли на своём фронте говнокодить и тащат свои уёбищные синглетоны в мой чистый бекенд. И блять типизации никакой не поддерживают. На один проект на node.js с тайпскриптом приходится десять написанных на чистой магии, когда хуй поймёшь что и куда приходит, в разных ситуациях - разные наборы полей.
Мамку свою неси, азаза
Всего 2:
>Cannot read property of undefined In JavaScript
>TypeError: "foo" is not a function
Рефакторинг в большом проекте на динамикоговне - та еще боль.
TS не помогает, когда колеги и тимлид игнорит его
Словно кроме б-г мерзкой жабы нигде нет статичной проверки типов
ну значит они дебилы,что не используют такую простую,но важную фичу
Хз. Минималистичное ООП, функциональные замыкания как в ЖС, но из-за строгой типизации приходится городить код не только для реализации бизнес-логики, но и для проверки и каста типов.
Нет, но выбора увы тоже нет, после го и эрланга/эликсира, понимаешь, что языки без грин тредов (не считая системных, там своя атмосфера) - это говно и нинужно. Это как сраниват ькрасивую карету и топорный автомобиль невразчный, но автомобиль один хер удобнее, даже если он страшный.
Как бы корутины из того же котлина вполне себе те же задачи решают. В джаву грин-треды вроде тоже или внедряют, или собираются. Нода, хоть и говно, но async-await позволяет писать примерно такой же синхронный код, а в ограничения по утилизации ресурсов системы (когда го начнёт выигрывать ноду) надо ещё умудриться упереться.
В-общем, грин-треды - это прикольно, но не панацея.
Лично мне го нравится сочетанием неусложнённости и производительности. Язык не идеальный, конечно, но идеальных я ещё не видел.
В жабу грин-треды завозят уже примерно 9 лет, и всё никак не довезут - project loom.
Грин треды и корутины - это свойство рантайма, а не просто либа, как большинство костылей на жвм. Вот есть у тебя котлин-корутины, и никакого толку от этого нет, так как их никто не использует кроме небольшего числа новых проектов. Условно гворя беря либу на го - ты её просто пользуешь и всё, она будет использовать те же каналы, те же корутины, тот же шедулер что и весь остальной код. Беря либу на жвм - ты берёшь или блокирующее легаси или очередной велосипед на тему асинка, который нужно будет дружить с основным велосипедом твоего проекта - kotlin.crorutines / vertx / zio / quasar / monix итд, тысячи их. Карочи, я к тому, что в плане удоства разработки конкаренси, JVM-based решения - хуйня и даже близко не стоят рядом с го.
После свифта и раста понимаешь, что языки без нормальных сам тайпов и опшионалов - это говно и нинужно.
>В жабу грин-треды завозят уже примерно 9 лет
Забавно, что изначально они там были, но потом их заменили на нейтив.
На том, что лучше знаешь. Но при равенстве имхо на го писать проще, потому что многие вещи за тебя решат GC и планировщик.
долбоёбы значит, феерически ебласнкое решение, хз как так можно. но думаю их там таки не было, есть ифна где почитать?
Да одноклеточным гошникам ясен хуй трудно общаться, слава богу хоть дышать хватает способностей.
школоту порвало, дрочающую на красивые сигнатуры функций, найс.
смотри, уёба, го - простой язык, для решения сложных задач, там где важна архитектура, убогая сфивтомакака (как ты) даже не слышала о таком. всю свою блевотную ссанину, ты будешь запускать на сервисах реализованных на го, они будет деплоится в кубере, выполнять сервис дискваери через etcd или координироваться через consul, объединятся в сложные service mesh топологии через istio и собираться в докер контейнеры. го - по сути вершина промышленной разработки, нам трудно общаться потому-что ты не инженер, а просто напёрдыш, горстка чиркашей на теле IT, иди к аким-нибудь скалистам мерятся type safety для задача уровня сложности "идиот".
>Ряяяя я на своей процедурной дрисне ришаю сложные задачи ни то что вы на красоту кода дрочите!
Мде, где-то я это уже слышал. Риальне, goвноеды- новая, деградировавшая версия сидаунов.
Ты потралить пришёл?
Этот совсем деградировал, уносите
Они прикольные, и когда научишься ими пользоваться (и если стек подходящий, т.е. не js и не php), то действительно практически ничего не делаешь руками. Абсолютное каждое действие вроде "объявить метод", "добавить метод в интерфейс и все классы, что его реализуют", "вынести выделение в переменную или отдельный метод", "добавить инъекцию черех конструктор" и т.п. делается одним привычным сочетанием клавиш.
В итоге становится очень больно смотреть на неудачников особо упорных личностей, которые так мееедленно тыкают мышкой в файлики и вручную копипастят код.
мимо-анон
Я раньше страдал долбоебизмом, писал в vim'е и обдрачивался. Потом симптомы постепенно пропали.
Не надо тут, даже сишка повыразительнее будет при необходимости.
Лол, а теперь посмотри на языки вроде хацкеля/окамла/раста/свифта и пойми, что переупрощенный синтаксис хорошо подходит для написания хелловорлдов и хуево подходит для всего чуть более сложного. По-настоящему интутитивный способ написания многопоточных программ -- в BEAM VM (эрланг, эликсир и еще какое-то лиспоподобие было). Не хочешь ебанутых проблем с мьютексами? Не используй, если проблему возможно переформулировать. Это ваше CSP подходит далеко не для всего.
Самый легкий синтаксис -- у лиспа, очевидно. И в го нихера не строгая типизация -- одна только конструкция interface {} с последующим приведениям к типам чего стоит. Говно, а не язык.
Лол блядь, щас бы называть язык, пославший нахуй результат эволюции ЯП на протяжении лет 30-40, а затем спешно меняя штаны после обсера, вершиной промышленной разработки. Тебе там без нормальной системы типов и дженериков нормально живется, ребенок?
Уже можно найти элемент в массиве или все ещё никак?
>По-настоящему интутитивный способ написания многопоточных программ -- в BEAM VM (эрланг, эликсир и еще какое-то лиспоподобие было)
бизнесу похуй. В гробу он видал твою БИМ. К сожалению, это реалии, за языком больше не может стоять дух авантюризма, присущий в 90-х. Пишем на том, что скажут.
Тут сидят владельцы айти-компаний?
Просто goвноеды осознают на каком говне пишут и поэтому постоянно пытаются себя загипнотизировать, типа на самом деле язык хороший, разве может Бизнестм выбрать плохой язык, он же раньше никогда такого не делал.
Лол, то-то воцап и дискорд на beam vm работают.
В каком-то смысле.
Бывает заходишь на проект на нормальном языке и вроде все норм, а потом выясняется что “А у нас тут Толян для этой задачи вьебал сервис на Go”, причём мотивация Толяна была только в том чтоб пописать на новом хайповом языке. И ты такой с fuuu-фейсом думаешь, мда теперь ещё поддерживать хуиту на недоязыке из восьмидесятых.
Да вот бывают такие, с плоской моделью и большой степенью автономности. Ну или если контора маленькая и CTO сам хипстерок еще тот.
Я сьебал, но осадок остался.
Можно, но не нужно. Поверь, для этих целей больше подойдут жабка, кресты, вот это все.
Можешь попробовать на эликсире с растом, но это на твой страх и риск и скорее всего не взлетит, лол.
Для таких целей даже го оверкилл, на питоне запили, лол.
По каким причинам го не подходит для данной задачи также, как кресты или жаба?
Потому что
1. В крестах ты вручную управляешь памятью, что ценно при гонке за производительностью.
2. Что джава, что кресты банально предоставляют нужный уровень абстракции, ты не будешь передавать в качестве аргумента объект типа interface {}.
3. Контроль за многопоточностью в таких приложениях нужен филигранный.
Тут даже хаскель лучше подходит, потому что, при схожей производительности, обеспечивает намного большую степень гибкости и надежности.
Не слушай его, это местный шизик.
Бери тот язык, в котором разбираешься лучше. И го нормально подойдет для задачи.
На самом деле я плюсовик, лол. Просто не хейчу другие языки и было интересно мнение по этому поводу. У меня приятель микросервисы на Го ебашит, вроде для своей ниши ЯП вполне нормальный, хз чего его хейтят.
Люди любят хейтить тех, кто от них отличается. Гошники отличаются от джавистов, можно хейтить значит.
В комунити пришли рубисты, и им стало неприятно без своих привычных фич, вот и впилили.
Да мимо уже, го не в тренде. Сейчас бы еще какой-нибудь лисп или кобол вспоминать.
SAS, Goviaji, APL - зависит от задачи.
Дофига, гугли. Плюс, есть активное сообщество в слаке golang-ru.slack.com (хотя там не всем можно верить, есть наркоманы, дающие странные советы)
Уёба, хороший конкаренси куда важшее чем твои "нормальные" системы типов и гейнерики. На уровне архитектуры сложной системы вообще насрать на завитушки в типах, ты можешь оброчится хоть всякими HKT, но это тебе не поможет толком с оздании сложной системы типа кубера. На продвинутые типы дрочат как раз школьники и дети, которые красят кнопки либо академические аутисты, которые пишут наколеночные залепухи. Тебя, долбоёба, не смущает, что все самые сложные системы вообще на си написаны? а? (По типу ядра линукса). Перфоманс и конркаенси вот что важно, а не твоя хуебарга.
Ты идиот? Ни в крестах, ни в жабе нет грин тредов, крестам это проститетльно - они системный язык. Жабе - нет. Разрабатывать на го приложухи где много работы с ИО в десятки раз удобнее, чем на твоей обосанной жабе, блядь, у них на го уже будет протип продукта, пока ты будешь ебаться с netty или котлин-корутинами, в и в итоге отсосешь по производительности и потреблнию памяти у гошного решения.
Го только недавно стартовал, платформа хорошая, экосистема только развивается. Пройдёт время - разрабатывать будет также комфортно, как и на джаве, но производительнее.
А джава к тому времени, возможно, вырастет в противоположную сторону, таки выкатив грин-треды и прочее. Хотя ей сложнее, у неё легаси больше.
> но это тебе не поможет толком с оздании сложной системы типа кубера
Иронично, что в пример ты приводишь куб, в котором соорудили свою систему типов и суррогат дженериков, лолблядь.
> описываешь свои аргументы
> получаешь оскорбление в ебало
ох уж эти го-фанатики.
Вот скажи мне, что важнее всего в высоконагруженном игровом сервере? Ответ -- скорость отклика. Если у тебя пинг скачет как хохол, то игроки на твой сервак забьют и уйдут в более стабильную игру.
Игровые серверы хранят очень много информации в оперативной памяти именно по этой причине. Надеюсь, у тебя хватило бы мозгов не хранить состояние чего-то вроде раунда в кс на жестком диске.
Твои грин-треды не являются решением для всего, маня.
Если я правильно помню, в го многозадачность кооперативная, а это не есть гут, если тебе нужно детально контролировать каждый чих каждого игрока, разделяя состояние между потоками.
Да, у го будет выше производительность, чем у джавы, но ты проигнорировал аргумент о системе типов. Допустим, ребята на го накидают какой-то сервер быстрее, чем ребята на джаве/скале/еще чем-то. А насколько такой прототип будет расширяемый? Ты понимаешь, что если прототип не расширяемый и не поддерживает большую нагрузку, то про игру забудут через несколько дней?
Чувак, не пихай го в нишу, в которой его применение является заведомо проигрышным вариантом. А лучше вообще его никуда не пихай, пока нормальные абстракции не завезут.
Я, кстати, писал выше:
> Он написан на го джавистами, которые написали джавоговно на го, отсюда и самопальные дженерики и неадекватная структура в коде кубов;
Там вообще забавная история произошла. Гуглы сначала написали альфу кубернетеса на джаве, а потом поняли, что нужно пиарить свой новый язык и менеджеры приняли решение заставить программистов переписать всё на го. Так как гугловых джавистов никто даже не собирался обучать гошечке, а им просто сказали "переделывайте", так что они просто пожали плечами, прочитали мануал по синтаксису го и написали кубер на го на джаве.
Соответственно, кубернетес написан отвратительно, но не из-за проблем с языком, а из-за менеджерских проблем (как и всегда, лол).
Но при этом чувак из >>507444 какой-то странный. Любую систему можно написать на любом языке программирования, если он тьюринг-полный.
спорят два идиота-фанатика и засирают мой тред, достали уже
мимо-анон
Ну так и зачем везде приводить его в пример, если он написан как говно-то? С тем же успехом можно посылать нюфагов изучающих си в исходники какого нибудь уёбищного gcc или линукса (где нестандартных расширений языка ещё на 2 стандарта си хватит) вместо няшных исходников бсд и хвастаться — сортите, как можим!
Хз, вопрос к даунам, которые приводят его в пример.
пруфани, что он написан на го ради пиара. он написан го потому-что го лучше подходит для таких задач, потому-что куб на джвае будет жрать в несколько раз больше памяти и тормозить. жаба жирная и тормозная - это факт, для рядового проекта, если ты пользуешь обычные либы и экосистему (которая является всратым легаси по большей части, с блокирующим ио). чтобы нормально что-то написать на жабе придётся изобредать велосипеды и потратить хуеву тучу времени.
пруфани, кстати, что он изначально был на жабе.
ты какую-то хуйню несёшь.
1. ничего не мешает тебе сделать низкую скорость отклика. Да, в го кооперативная многозадачность, но горутину можно убить, если там нет долгой блокирующей операции (через канал например). Опять же если тебе нужна вытесняющая многозадачность - велком ту эрланг, нахуй ты опять свой жвм велосипед катишь? не проще ли забивать гвозди молотком, а не отвёрткой?
2. у тебя самого хватило мозгов понять, что off-heap храннение доступно почти на всех мейн-стрим платформах?
3. схуяли не расширяемый? может твоя команда не умеет в проектирование? есть куча сложных и масштабных проектов, и ничего расширяются допиливаются.
К примеру, вот прототип кубера (т.г. "Омега"), он на скале https://github.com/google/cluster-scheduler-simulator
Вот тут про это рассказывали, вроде https://archive.fosdem.org/2019/schedule/event/kubernetesclusterfuck/
Где можно прочитать русский перевод документации к стандартным пакетам?
Кстати, почему в Китае Go так популярен? Китайцы уже перевели документацию:
https://go-zh.org/pkg/
https://github.com/Go-zh/go
Чем больше вижу сообщений в этом треде, тем больше убеждаюсь, что go-кодеры самые отбитые и недалекие, лол.
Ты когда-нибудь писал по-настоящему сложный игровой сервер?
Или вообще что-нибудь, что одновременно должно терпеть высокие нагрузки и быть сложнее калькулятора? Про адекватную систему типов слышал? Нет? Оно и видно, лол. этот тезис ты, кстати, почему-то постоянно игнорируешь. Видимо, все же понимаешь, что тут даже заикаться бесполезно.
Про тот же кубер уже выше написали, что там эмуляция дженериков сделана, потому что го сам по себе ущербное поделие из 80-ых в худшем смысле.
И да, дай, пожалуйста, примеры высоконагруженных серьезных игровых серваков на го. Отмаза в стиле "никто не понимает величия го, вот жеж еретики" не принимается.
какие же большинство go-шников агрессивные дегенераты, пиздец просто
ты кроме своей "адекватная система типов" нихуя по делу сказать не можешь. игровые сервера... блядь, маня, мир не сходится в игровых серврах, какая-нибудь сложная распределённая реляционка типа cockorach или tidb куда сложнее твеого обосанного игрового сервера и предъявляет такие же требования по работе с ио и верменем отклика.
Не могу не согласиться, но последние 5 копеек все же вставлю.
>>508436
Мальчик, ну это слишком жирно. Сначала мы рассматриваем именно игровые сервера, а затем ты обсираешься и пытаешься сменить тему. Постирай штаны, а то так и будешь в говне ходить.
Распределенные субд -- из примеров могу сходу привести Cassandra (Java, есть клон ScyllaDB на крестах, сам догадайся почему), CouchDB, Mnesia (erlang), PostgreSQL (c), MongoDB (c++). И да, задачи все же разные, будь добр не смешивать.
А про систему типов я тебе как человек с еще тем образованием и опытом не зря говорю, поверь. Чем лучше система типов -- тем меньше нужно писать для по на базирующемся на ней языке тестов. Как пример: js который ближе к лиспу, чем к джаве, кстати против idris с его зависимыми типами.
В этих твоих гринтредах нет ничего магического и нового, я их для одной задачи еще в 2006 на си пилил. Ты и сам повторить сможешь, если религия даст написать немного кода на сях и подрубить ucontext.
Как же жаль тебя, адепт го, ты ведь так себя ограничиваешь, принципиально отказываясь рассматривать другие подходы и технологии. Хотя, так ты никогда не узнаешь, что на само деле твой язык -- просто говно, которое гугл который, блджад, не всегда прав решил по какому-то странному стечению обстоятельств хоть как-то отбить инвестиции зафорсить. Впрочем, вряд ли у тебя хватит интеллекта для того, чтобы пересмотреть свое мнение.
Спасибо, вкурил вроде.
ОЖИДАНИЕ
Пишешь высоконагруженные сервисы для всемирно известных продуктов, типа твитча или доты
РЕАЛЬНОСТЬ
Пишешь очередной аналог убера для говностартапа
У Го есть неоспоримое преимущество перед эликсиром/эрлангом : вакансий гораздо больше
Бэкенд твитча писался на го
А ты будешь то вкатыватсья в принципе? Список у тебя подозрительный, похоже на малолетнего школьника-иградауна, такие обычно кричат "хочу игори писать!", а потом забивают и дальше идут гамать и аутировать в твиче. В больших конторах зоопарки там обычно нет какого-то одного языка или плафтмормы, можно сказать только в общих чертах.
Так-то тут дело не в конкрентном языке или платформе, язык это просто инструмент, а в общем понимание подходов, архитектур и прочего кругозора, понимания что ты вообще делаешь. Конкаренси, сетевой стек, протоколы, обеспечение масштабирования и отказоусточивости, общее проектирование систем - модульность, декомпозиция, итд.
скайп - мало, что известно, в основном C++
твич - C, C++, Go
телега - вообще хз, если кто расскажет будет интересно
вов - в основном плюсы
>>509602
>Телега
Бекенд я код не нашел, но слышал что он на C++
Кор клиента (протокол, работа с локальной базой, вообще вся логика) написана тоже на C++
Клиенты (по факту только UI часть):
IOS: C 53.2% Swift 20.3% Objective-C 13.1%
Андроид: Java 42.8% C 36.9% C++ 14.6%
Десктопы - QT, почти 100% С++
Скайп давно уже является оболочкой для msm, всё оригинально-скайповое из него давно вырезали.
Но выбор языка - это вообще очень сложная вещь и там много факторов, кроме популярности.
В eve online, например, бекенд вооще на питоне написан
>Но выбор языка - это вообще очень сложная вещь и там много факторов, кроме популярности.
Сроки+кадры, всё, ничего сложного нет тут.
Другое дело, если ты сам пишешь себе манясервер на 1,5 человек. Но тут уж хоть на хаскелле пиши, хуйлоада всё равно не будет нужно выбирать тупо самый знакомый инструмент.
>Сроки+кадры, всё, ничего сложного нет тут.
Не знаю как со сроками в EVE было (наверно как везде - нужно на вчера)
Но вопрос - много ли ты знаешь python game dev'ов?
>Но вопрос - много ли ты знаешь python game dev'ов?
А в чём проблема, по-твоему нужно специализироваться на питоне чтобы что-то на нём написать? Прямо куча байтойобов-плюсовиков не освоят за пару вечеров какой нибудь aio и не сварганят сервер?
Алсо, возможно там уже были бэкэндеры на питоне.
Ты меня, на самом деле, убедил. Но в любом языке много своих подводных камней, и питон - не исключение, а у него еще и магии очень много
>а у него еще и магии очень много
Которая хоть и всегда медленно, но работает. И именно из-за этого это язык №1 для вкатывальщиков (и просто №1 по всем количественным статистикам).
Я уже вкатился, но не в настоящий бекенд. Пишу на ноде всякую муть под aws lambda.
Ты ошибаешься, я не хочу писать игры и геймдев мне не интересен, мне интересно делать хайлоад бекенд для массовых продуктов, в том числе для игр, как один из примеров. Интересны конкретно распределенные системы с реальной многопоточностью, параллелизмом, когда одновременно обрабатываются десятки тысяч двусторонних соединений, например. А не как кастрированный асинк авейт в JS с одним потоком.
> кастрированный асинк авейт в JS с одним потоком.
У меня для тебя плохие новости, ты не вкатился бекенд. Даже текущий инструмент не освоил, нода многопточна за счёт воркеров, в которых потом используется модель обмена сообщениями, да, у тебя нет аналога util.concurrent из жабы, но данная модель тоже популряна и очень живуча.
нодовская реализация промисов вообще топовая, там самый стабильный и оптимизированный event loop на рынке. Так-то если умень готовить и не увлекатсья абстракиямию можно на NIO задачах получать впечатляющие результаты и махаться с гошкой и netty по перфомансу.
Таки ты не совсем прав. Во вполне определённом классе задач (собственно, параллельные действия на уровне логики) нет смысла сравнивать ноду и го, потому что это эвент луп против множества потоков. Например, если мне захочется пробежать массив из триллиона элементов и почему-то он будет у меня в памяти - в го я могу делать это, к примеру, в два потока (с середины и с начала), а в ноде только в цельный проход от начала и до конца, и ничего ты тут не сделаешь.
Другое дело, что по моему опыту это не особенно часто нужно, большая часть бизнес-логики вполне синхронна и её вполне быстро обрабатывает хоть нода, хоть го, хоть прости-господи пыха.
Но это опять же смотря что писать, потому что большая часть той самой бизнес-логики это перекладывание данных из интернетов в базу и наоборот.
Соответственно, если речь идёт о сервере для обсчёта каких-то сложных игровых механик (те же бои в еве), то го или та же джава тебе подойдут лучше, чем нода, за счёт лучшей утилизации ресурсов.
Тут нужно чётко понимать грань, где и какой инструмент использовать, потому что для 95% проектов подойдёт что угодно, там и близко нет таких нагрузок. В таких случаях лучше брать то, где ты быстрее выкатишь фичи и получишь $$$, джаву, пыху, ноду или ещё что.
мимо-анон из стартапа по обработке данных, пишем движок на го, а админку и прочий биллинг на пыхе
Это у вас аутотренинг такой?
А в чём он спиздел-то?
У тебя списочек устаревший кстати, новая версия телеги для яблочных девайсов уже на свифте
https://github.com/overtake/TelegramSwift
А джавы даже на андроиде меньше половины
https://github.com/DrKLO/Telegram
кекус.
Ещё они недавно опубликовали исходники TON
https://github.com/ton-blockchain/ton
которая написана на плюсах, как и всё её окружение
https://github.com/desktop-app
что как бы намекает на чём написан бэк телеги.
Но на ноде же не напишешь бекенды уровня дискорда или твитча, и тем более вотсаппа.
А ноду-то ты каким хуем сюда приплёл?
>дискорда
Судя по их гитхабу у них вообще бэк на элексире (+немного питона), и ботлнеки на расте/плюсах, хипсторы 80 lvl.
на крестах, алло
:=
на гоу пишут обычно небольшой вэб без бизнес логики. например, kubernetes. если задача хоть немного будет меняться, ты затрахаешься использовать го
ну раз ноунейм написал, что менее выразительный код go принемет больше clarity - то да, сложно не согласиться
Удивлю, но бизнес-логика есть всегда и везде, это по сути именно та полезная работа, которую делает продукт либо сервис. В случае кубернетес, полезная работа - это оркестрация, встроенный планировщик, вот это всё. А вот хранение состояния, кластеризация и там протоколы всякие - это уже инфраструктурный уровень.
>>483053
Проиграл с местных даунов. Лучше иди и отнаследуй абстрактную виртуальную фабрику фабрик, а то чо у тебя код недостаточно оопшный и магический..
Пиздец, это чё рофл? С такой логикой на паскале или няшной вообще всё кристально ясно, а на говне как раз нет ясности, потому что GC затуманивает предсказуемость работы.
это не мешает ему быть сиподобным, свифт и пхп тоже имеют возвращаемый тип после функции, например
Что предъявишь свифту как языку? Ты ведь не просто так вскукарекнул без знаний о нем, так ведь?
Что конкретно в свифте ты считаешь водой?
Да,педики прикинь))реально на макоси(хуй саси) сидят и на своем свифте пидорском пишут хахаха)))
>смеемся над джавистами, которые не могут жить без ексепшенов
Но в 2.х ведь завезли. Кстати нахуя? Ручная обработка ошибок ведь надёжнее
Есть официальный драйвер. Дальше можешь или Gorm навернуть или прямые запросы в базу писать
Не завезли. Читай новости.
Использую github.com/jinzhu/gorm
Я не матерый разработчик, а июнь, но вполне работаю в продакшене.
напишешь, нода довольно крутая штука, просто нужно уметь готовить. paypal на ноде, netflix начинает её всё больше внедрять.
Горм - на редкость херовая штука. Самый главный его минус в том, что он магический, ты не сможешь предсказать, что он сделает. К примеру, угадаешь, что будет, если я вызову db.Delere(user{})? Не угадаешь, он дропнет тебе всю таблицу.
И вместо джоинов он селекты использует и мерджит данные на своей стороне (и довольно медленно).
Его можно использовать для прототипирования, чтобы быстренько круд навернуть и всё такое, но не более.
>>512808
Sqlboiler пока что выглядит наиболее идиоматичным для го.
мимо
Вот тоже много чего плохого про gorm слышал, поэтому и спросил. спасибо за ответ
а что есть настоящая? шареные между тредами структутры? тогда в эрланге её тоже нет, лол.
Как бы очевидно, что анон говорил о том, что в ноде процесс по сути всё равно один, не считая воркеров и ассинхронного io.
Но он неправ в том, что "многопоточность" является киллер-фичей. Нодовой псевдо-многопоточности достаточно для написания достаточно нагруженных апи, так что вполне себе нормально писать на нём хоть дискорд, хоть вотсапп, просто демонов побольше назапускаешь и всё.
Понятно, что это будет несколько менее производительно, чем гошечка, за счёт утилизации ресурсов, но вполне себе будет работать.
вот утилизация тонкий момент, нода может быть в плане ио, и более производительна чем гошечка или эрланг, чисто за счёт того, что колбек/промис - это существенно более легковесная сущность, чем грин тред. а на ио нагрузке, многопоточность как такова не сильно влияет в мастшабе всей системы. т.к. можно комфортно маштабироватсья через кубер или иную оркестрацию, мелкими контейнерами, сидя за балансировщиками.
Нодоперделка это сраный FSM, каждый раз добавляя новый колбек в этот FSM, ты замедляешь общую скорость работы. Т.е. оно может работать быстро пока у тебя там 3.5 ивента, но потом треды тупо быстрее. IO может быть параллельным, но так как нода работает с одним потоком, она в него не может. И, очевидно, решения сделанные на уровне балансировщиков будут медленней встроенной многопоточности.
Да и нахуй эта наркомания, считай тебе надо запустить по инстансу на каждое ядро, все это сбалансировать сначала в рамках одной машины, настроить между ними пабсаб с каким нибудь рэбитом, потом обеспечить общий сторейдж добавив какой нибудь рэдис, потом нужен фронт сервер для балансировки типа нджинкса и ещё хуй пойми что, в то время как в go/эрланге это все сразу встроено и ничего делать не надо.
Не скажи, балансировщик к примеру нужен внешний, потому что между инстансами или кластерами тоже нужно балансировать запросы. Тем более, l7. Тем более, балансировка сокетов, grpc и им подобных постоянных соединений.
Лол, оно может работать когда у тебя и миллионы эвентов. Паттерн эвент-лупа, как раз на это и расчитан. поэтому принципу работают очень высокопроизводительные сетевые штуки типа nginx, envoy, и многие другие. Луп эфективнее грин тредов для сырого ио.
Чего? А где пруфы?
Как бы по умолчанию несколько воркеров эффективнее одного, при отсутствии блокировок.
мимо
ну так никто тебе не мешает запустить несколько воркеров, хоть процессами, хот ьв пределах одного процесса.
нжинкс это пул воркеров с лупами
https://www.nginx.com/blog/thread-pools-boost-performance-9x/
https://habr.com/ru/post/123154/
Я спрашиваю, где пруфы на "Луп эфективнее грин тредов для сырого ио".
Про nginx:
Во-первых, nginx - это пул воркеров, а не единый воркер с лупом. Соответственно, чтобы утилизировать все процессоры, ты просто запускаешь сам nginx и он поднимает воркеров по числу процессоров. С нодой тебе придётся поднять инстансов ноды по числу процессоров. Понимаешь разницу между воркерами одного процесса (тем более, написанного на плюсах и не имеющего значимого рантайма) и несколькими процессами v8?
Далее, для nginx эта архитектура оптимальна, поскольку его задача - это проксировать запросы из очереди апстрима в куда-то и проксировать ответы обратно, оно всё строго синхронно, соответственно нечего распараллеливать.
Для бизнес-логики всё можеть быть не совсем так.
Я к чему виду, нода при прочих равных будет дороже goшечки (интерпретация, оверхед на динамическую типизацию, оверхед на рантайм, оверхед на сборку мусора, оверхед на прочие инстансы), которая будет дороже c++ (за счёт рантайма, планировщика и сборки мусора).
Вот когда в v8 наконец-то добавят нормальный шаринг ресурсов между инстансами, чтобы получился эдакие application server - вот тогда мы вернёмся к разговору о сравнении потребления ресурсов между гошечкой и нодой. И то, я сразу предскажу, что будет: на синхронных тестах всё будет +-сравнимо за счёт оптимизаций на уровне v8, а на паралелящихся алгоритмах типа map-reduce гошечка затащит.
> С нодой тебе придётся поднять инстансов ноды по числу процессоров.
А как же кластеры? https://nodejs.org/api/cluster.html
Или это оно и есть?
там по разному можно
кластеры - это процессы. воркеры - это треды в пределах одного процесса.
Java - это кобол 21 века.
Какую библиотеку для обвязки ncurses под Go нужно брать? Нашёл эту: https://github.com/rthornton128/goncurses
Но в ней ни документации, ни активности.
Посмотри гошные тулзовины, которые графики всякие красивые в консоли выводят. Полюбому они что-то используют.
Видел статью на хабре про красивую консольную утилиту, которая как раз на go. Но сейчас не могу найти ни названия той утилиты, ни статьи. Есть идеи, где искать?
Всё, нашёл. Sampler называется
Зачем b присваивается новый срез такой же вместимости (без этого не работает)?
Второй вопрос снимаю, это какой-то даун написал, тут важно просто возвращать правильную длину
Первый тоже снимаю. Передаётся копия объекта, но ссылается на оригинальный массив.
Для однорыльного я бы брал голанг. Мне кажется, джаву надо брать, если проект на человек 10 и тд.
Плюс, насколько я понимаю, в голанге проще накидать прототип, чем в джаве
Тогда гопарашу, потому что на нее любого васяна можно за пару дней обучить. С джавапарашей будет сложнее.
Спасибо огромное, друг! Только я всё равно не понял почему выдавало стек оверфлоу.
Я думаю, что дело в том, что когда ты вызываешь fmt.Println() для ошибки, оно в первую очередь проверяет, есть ли у структуры метод Error(), и если есть, то вызывает его. По факту, ты создал бесконечную рекурсию вызовов метода Error()
У тебя при выводе ошибки была ошибка, которая вызывала функцию ошибки, в которой ошибка, которая при ошибке вызывала функцию ошибки. А вообще я только два дня вкатываюсь, так что не ебу, как такие вещи ловить.
(void) argv
чтоб компилятор не ругался о том, что переменная не используется?
После объявления foo на следующей строке пиши _ = foo
Для аргументов функций/методов это делать не нужно
Или сразу func Test(_ argv) {//...}
Слушаю ваши оправдания, goвноеды.
Так же, как и браузеры, что уж тут. Зато поддерживаемый хромом https://en.wikipedia.org/wiki/QUIC мало где кроме GO заимплеменчен
> Так же, как и браузеры, что уж тут.
Дядя, проснись, ты обосрался: https://caniuse.com/#search=http2
А кто на дваче ещё сидит, кроме школьников и странных личностей? задумайся про себя, кстати
Я как в /pr не зайду, так охуеваю от местных знатоков. Где тебе ещё расскажут, что архитектура нинужна, менджеры зависимостей нинужны, типизация нинужна, а чёткие пацаны херачат невероятный JS-код на кончиках пальцев через vim прямо в продакшен.
Такой вопрос, хочу написать фильтрующий прокси-сервер чтобы вкатиться в goршок. Оно то и понятно, чтобы нафигачить полурабочий пет проект можно любые технологии заюзать. Но вот я задумался, если по уму все делать, что лучше будет. Пилить все на го, или лучше запилить плагины для nginxa(что на го в целом тоже возможно)? Что по-вашему будет лучше, чтобы держать большой трафик с возможностью снифать его по https.
сажи
Смотря что понимать под жиром рантайма. Если сравнивать с жвм/дотнетом — целой вм и всего обвеса к ней очевидно, нет. Если же сравнивать с нативными языками без рантайма вообще вроде сей/растов/итд — то да, ебать жирный (и мусор собирает, и каждое обращение по поинтеру менеджерит, и потоки полностью контроллирует и тд).
Зависит от задачи. Но вообще сейчас для всяких микросервисов и сервис мешей го берут: envoy, traefik, krakend.
Но nginx тоже очень даже норм и скорее всего даже будет производительнее (в простых случаях).
Ок, спс за ответ.
Назрел такой вопрос, мб кто знает. Если я хочу сделать так, чтобы многие сайты могли подключиться к моей проксе (тип как incapsula), то как в этом случае поступать с https трафиком. У каждого сайта свой сертификат, мне требуется "изымать" оригинальные? или хватит свой подписанный собой. Так же интересует вопрос, вот я обработал запрос по https, проксировать его на другой сайт надо тоже по https? или забить и по http отправлять?
Зависит от задач твоего прокси. Если рассматривается возможность удаленной авторизации пользователей, то сертификация соответственна должна быть от конечного сайта, https идет в приоритете. Если же нет, то смело клади и на https и на сертификаты
Если брать обобщенно, то я бы добавил включение ssl и cертификатов опционально
Суть: как сделать так, чтобы хотя бы пригласили на собес, а не выкинули резюме в мусорку при подаче оного? Подрочить pwnы на HackTheBox? Или сходить на CTFы пару раз? Ведь на реальных примерах это не показать, ибо, ясень-пень, незаконно.
Насколько я знаю, конторы сканят участников всяких хакер-фестов на предмет найма.
Вкатись c Linux Kernel Development
Израиль?
или не поинтер, а хуй его знает, посмотрю в спецификации короче
Ты походу прав, это говно внезапно может менять свой тип:
Вывод кода с закоментированной `sn = "pizda"`:
hui hui
pizda pizda
Вывод с раскоментированной строчкой:
>Вывод с раскоментированной строчкой:
panic: interface conversion: interface {} is string, not *string
Хотя мы тут явно создаем новый interface{} через присвоение sn нового значения, так что все норм
Хотя с херали
Хуя себе! Т.е. gRPC можно уже и в браузерах использовать?
Любое интерфейсное значение - это структура из двух поинтеров - один к реальному значению, другой - к всякой метаинформации (рантайм тип)
Именно по этому к переменной с типом слайс интерфейсов нельзя присвоить слайс значений, которые имплементят этот интерфейс
Интерфейсное значение - это всегда поинтер к оригинальному значению. Если оригинальное значение уже поинтер - используем его, иначе - берем поинтер от оригинального значения.
https://play.golang.org/p/j2aTxgb-Epz
Могу тебе напиздеть, но как я это понимаю:
- В го переменные выглядят, как <имя>-<тип>-<адрес памяти, где лежат данные>;
- Соответственно, когда ты что-то передаёшь "по указателю", ты создаёшь новую перменную, указывающую на тот же адрес памяти, что и "старая";
- Таким образом, когда ты говоришь "i = &x" ты перетираешь значение "адреса" у локальной переменной и потом пишешь в новый адрес; Старый адрес остаётся нетронут.
Вот этот хуй писал ещё https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go , т.е. передачи по указателю, как в си на самом деле нет, а передаётся копия адреса, я понял. спасибо.
Не рекомендую использовать эти биндинги - они глючат, когда начинаешь что-то более-менее сложное писать. Лучше бери нативные либы типа tcell.
https://yourbasic.org/golang/advantages-over-java-python/
>профессор
@
>разрабатывал на жабе 20 лет
@
>рандомный долбоёб в треде говна
@
>АРЯ ПРОФЕСАР))ЖАБАПИТОНАГАВНО А ВОТ ГОШЕЧКА НЯШНАЯ)))
> статическая типизация
> нет дженериков
> res, err := doSomeShit()
> if err != nil ...
> нет лямбда выражений
> для итерации по массиву используем цикл (привет из 1962 года)
> нет классов и ооп
> нет нормальных фреймворков
> указатели
Съеби отсюда, школьник. Все эти вопросы обсасывались уже не раз.
Вернёшься, когда тебе хоть раз действительно понадобятся дженерики в продакшен-коде. И когда выучишь, что такое лямбды.
Остальное даже комментировать не буду.
- где вывод типов?
- где шаблоны?
- где оптимизация хвостовой рекурсии?
- где fold, map и хотя бы фильтры? Даже в ебаном шарпе есть LINQ
- где расширения методов класса?
- где перегрузка параметров функций?
- где нормальное потребление памяти приложением?
- где перегрузка операторов?
- где оптимизиции хвостовой рекурсии?
- где ленивость?
- где нормальная реализация модели акторов? Каждый разработчик вынужден с нуля лепить свою реализацию обмена сообщениями между горутинами
- где человеческая типизация с возможностью объявить канал сообщений нескольких типов?
- где человеческая инкапсуляция? Единая область видимости на весь пакет, охуенная идея
- где нормальная обработка ошибок?
Всего, чего нет в го, автоматически объявляется хуитой, как только это появляется в го, это автоматически становится нехуитой. При этом, требуется сделать вид, что хуитой это называл кто-то другой.
Ещё раз, съеби нахуй отсюда.
> где нормальная реализация модели акторов? Каждый разработчик вынужден с нуля лепить свою реализацию обмена сообщениями между горутинами
Никогда не перестану рофлить с долбоёбов
Если вкратце, то если эта модель - часть твоей предментной области, то и правила валидации - это тоже её часть. Опиши механизм валидации этой модели и вызывай его перед сохранением. Если хранишь оригиналы модели до изменения - то можешь смотреть дифф и валидировать только изменённые поля.
В качестве валидатора можешь присмотреться к go-validate или делать всё кастомно.
Если чуть посложнее, то по-хорошему нужно валидировать не модель перед сохранением, а данные до попадания в модель. Для этих данных можно описать отдельный механизм валидации и валидировать их перед (в начале) вызовом какого-то сценария.
>>524650
Съеби нахуй.
> Это я же был
Тогда сорян, принял тебя за местного дауна
Насчёт контекстов, то тут тебе нужно поизучать архитектуру. Прочитай про clean architecture, hexagonal architecture, domain driven design и попробуй разнести логику по соответствующим ей слоям. Сущности типа валидаторов не вызывай явно, а инжекть через конструктор и вызывай как метод поля у application сервисов или доменных сервисов.
Но это если ты хочешь красиво и правильно сделать. Если надо быстро нахуярить говнокод - то ты и сам всё знаешь, делай, как рука размахнётся, да пальцы настучат.
Потсоны, такое дело, я вообще не погромизд, но вынужден был писать некоторые сервисы для конторы на джанге. Успешно писал, в общем то.
Сейчас встала задача сделать еще один, который будет куда глобальнее прежних. И тут мой начальник, начитавшись интернетов, заявляет джанга мол твоя, легаси говно. Давай на го пиши. Говорю, не умею я в го, и учиться долго буду потому что я немного тугой. Он говорит ну тип похуй, отправим тебя на какие нибудь курсы хуе-мое.
Так вот, насколько я знаю го это кровавый энтерпрайс уровня жавы, нет?
Реально ли в одиночку там что то более менее внятное высирать? Или лучше на джанге продолжать говнячить?
Ты показал встроенный интерфейс, а там встроенная анонимная структура, ну я погуглил, походу они обосрались просто в тесте
Как раз го крайне прост, чтобы его изучить в одиночку, будучи не особенно скиллованным. И да, он будет производительнее дженги.
Единственно что, у дженги полюбому есть уже готовый генератор админок, формочек и тому подобного говна. Го же чисто бекендерская тема для производительной многопоточной обработки данных по сути. Так что делать апишки на го - заебись, а вот легконастраиваемой пользовательской визуальной обвязки и прочего нет, потому как и спроса на это нету.
Дальше сам решай.
Ну и спрашивай, если что, мы тебе тут ответим.
Для чего этот язык используют?
Да + демоны и консольные утилиты
Для всего. Даже на микроконтроллерах есть
https://github.com/ziutek/emgo
https://github.com/tinygo-org/tinygo/
Было 100, стало 99. Норм.
Везет же тебе
Ты идешь в правильном направлении, но не дошёл до конца.
Во-первых, непонятно, нахера тебе декоратор.
Во-вторых, этом не место в мейне.
В-третьих, сервисы не передаются через контекст, он не для этого.
У тебя должен быть отдельный пакет-консольное приложение (условно "cli"), в котором ты описываешь то, как ты берешь аргументы из конфига, переменных окружения и команды типа serve, migrate и прочего.
Внутри этих команд ты действительно вручную инициализируешь сервисы. Зависимости между ними решаешь с помощью инъекций через конструктор, граф инициализируешь либо руками, либо через wire от гугла, как удобнее.
Потом в определённом порядке бустртапишь сервисы и в обратном порядке регистрируешь для остановки (чтобы graceful shutdown сделать), потом слушаешь сигналы от ОС, как получаешь нужный - вызываешь последовательность shutdowner'ов.
Сами сервисы правильно делить на три слоя, инфраструктурный, юз-кейзов (или application) и предметной области (domain или core), про это можешь прочитать в книгах по DDD.
Ну и да, в го проблема с архитектурой из-за засилья сишников, которые привыкли кодить, как видят (буквально в одном файле всё держать), так что ты всегда услышишь, что "архитектура нинужна, пиши проще", таких людей можешь слать нахуй.
>Во-первых, непонятно, нахера тебе декоратор.
Это к примеру, когда у демона торчит наружу rpc/rest api мне нужно прокинуть, туда соединение к БД, чтобы что-то запросить и отдать.
func List(d *Daemon) http.HandlerFunc {
return func(...) {
// здесь обращаемся к базе и логируем ошибки и т.д.
}
}
>Во-вторых, этом не место в мейне.
Выглядит примерно так всё:
func main() {
app := app.New(config) // там открываются соединения с базам и разными api
if err := app.Run() { // бесконечный цикл
log.Error(err)
return
}
}
>В-третьих, сервисы не передаются через контекст, он не для этого.
Не понял. я имел в виду не пакет context, а контекст выполнения ф-ии/метода. Ну т.е. имеется моя огромная структура type App struct {}, где вообще всё и где мне что-то нужно сделать, и где нужен логгер и БД из неё, я просто делаю это как её метод, т.е. о Single Responsibility речи вообще нет. Как это всё делать правильно?
> Это к примеру, когда у демона торчит наружу rpc/rest api мне нужно прокинут
Нет, это не так работает.
У тебя должен быть сервис (условно) handler.UserHandler, который через конструктор получает HttpServer и (к примеру) usecase.SaveUser, и регистрирует свои методы в качестве роутов, всего такого.
Внутри роутов он достаёт из http.Request (или как он там называется, я не помню сходу) нужные аргументы, проверяет их тип и всё такое. Если всё валидно, он прокидывает это в условный usecase.SaveUser, в котором уже написана реальная логика, что тебе там нужно с ним сделать.
То есть, у тебя отдельно есть httpServer, отдельное есть хендлеры(контроллеры), методы которых 1 к 1 биндятся к роутам и занимаются тем, что достают данные из http, вызывают логику из слоя юз-кейзов, получают ответ, и пишут его обратно в http, и отдельно есть слой юз-кейзов, который просто принимает данные и делает то, что нужно (логику).
> Выглядит примерно так всё:
В мейн-функции это делать не стоит, потому что у тебя может быть туева хуча различных вариантов работы с приложением. Main-это точка входа + роутинг для консольного приложения, в которое скомпилируется твой код. Граф зависимостей собирается под конкретную задачу. Представь, у тебя есть две консольные команды, serve и migrate. Нахера тебе в migrate какой-нибудь http?
> имеется моя огромная структура type App
То есть, у тебя есть какой-то огромный божественный сервис-локатор. Это неправильно и не нужно. Просто инъекти зависимости через конструкторы и собирай набор сервисов под текущую команду (или тест, к примеру).
>имеется моя огромная структура type App struct {}, где вообще всё и где мне что-то нужно сделать
Это называется God object. Не надо так делать почти никогда (но иногда можно).
Да, фулстек с го сейчас редкость
И?
Ну эт толсто, даже в рахе уже мыло, авито, озон, тинькоф на го, а это довольно крупные компании
Тиобе говорит что govno почти вылетело из топ20 и продолжает падать.
Язык был рассчитан на нюбасов, которым тяжело вкатится даже на сверхпопулярных джаве и питоне.
Все что было за этим языком это хайп и куча маркетингового буллшита от гугла, но хайп ушёл, хайп на микросервис-парашу ушёл, нюбы поняли что вкатываться некуда. Некоторые крупные конторы, которые могут позволить экспериментировать немного вляпались в эту парашу, но это временно.
То, что тиобе - хреновый рейтинг, можно понять по тому, как резко там языки теряют и набирают популярность за месяц.
Вот, можно взять https://insights.stackoverflow.com/survey/2019#technology
Чтобы понять, что Go - 13ый по популярности, 9ый в списке самых любимых, 19ый в списке нелюбимых ,3ый в списке желаемых и 3ый по зарплате
Так тиобе же показывает популярные технологии с точки зрения вкатывальщиков, а не использования
Как объяснишь, что в основновных ру онлайн образовательных площадках за последний год появились курсы по go: нетология, отус, гикбрэйнс, на курсере mail два онлайн курса запустил, то есть интерес к языку только растёт
Буду разрабатывать бекенд веб-сервиса на go, другой разработчик будет пилить фронт. Можно ли сделать так, чтобы фронтендеру не приходилось устанавливать к себе на комп go, и при этом он мог запускать локально сервер, чтобы пилить и тестровать фронт? (и очень желательно с отлеживаением измененных файлов, для перезагрузки сервера) Я новичок в разработке и буду рад за наводку на те инструменты которые мне помогут
Юзайте докер. Опишешь всё в docker-compose - файле и фронтендщик сможет сделать docker-compose up и получить себе полносью рабочий сервис без установки всего дерьма себе в систему.
>>15>>528476
Мне казалось сокмплированному мной файлу, уже не нужен установленный go на пк, чтобы его запустить
*скомпилированному
Я и думал об этом уже, но судя по всему тогда легче заставить человека golang установить, чем тот же docker
>>528474
чисто фронтендер который всегда только на js пишет (нода установлена), и не очень лоялен чтобы использовать что-то не знакомое (придется ведь голанг ставить, да ещё возможно и переменные окружения настраивать на винде!)
А разве на голанге пишут что-то отличное от рест сервиса и тому подобноого? Нафейхоа ему устанавливать голанг? или у вас публик сервера нет?
Ну да, но тогда тебе придётся каждый раз присылать фронту новую версию
> Я и думал об этом уже, но судя по всему тогда легче заставить человека golang установить, чем тот же docker
Лолчто? Докер - это уже де-факто стандарт. И фронтендеру он нужен как раз для того, чтобы не ставить себе стороннее говно в систему, нуль лишних зависимостей - кроме самого докера.
>>528515
Пусть учится, го в докер засовывается очень просто и мануалы по этому делу тоже изи ищутся.
>>528548
Это нормальная тема, иметь у себя локально полностью поднятое приложение или сервис, намного удобнее разрабатывать - и фронту в том числе.
>>528531
А ещё база, миграции и прочая херня. Лучше сразу подумать о доставке, найти мануал и сделать всё нормально.
Чтобы увидеть как го "умирает" достаточно посмотреть количество го-репозиториев на github больше чем с 5к звезд.
А если ещё рассматривать репозитории не старше 1 года, то го вообще в топ-3 вместе с Python и JavaScript
я щя блевану
И зачем же он тебя обоссал?
Автор чсвшный мудак, которому лично мне захотелось ебало начистить, при том, что мне и haskell также нравится, но насколько же это тупое сравнение, go простой язык, но у него есть свои концепции и идиомы, а сишарпоблядок пытался сделать так, как привые и ожидаемо сел в лужу, начав говнить на язык, ну и очевидно, что работа с рекурсивными стуктурами на haskell будет удобнее делать. Тупо короче сравнивать языки на примере маленькой задачи.
Все сишарперы как то криво по земле ходят
В Java 1.1 green threads являлись единственной потоковой моделью (моделью распараллеливания потоков), используемой в JVM[7], по крайней мере, в Solaris. Ввиду того, что green threads обладают ограничениями в сравнении с native threads, в последующих версиях Java основной упор сделан на native threads.
С вики.
Вероятно, тогда их время ещё не пришло.
Работаю на ноде, пишу только апишки. Все зависит от компании
>Карочи, я к тому, что в плане удоства разработки конкаренси, JVM-based решения - хуйня и даже близко не стоят рядом с го
Scala
FUUUUUUU
haskell ofc
Я NodeJS/PHP макака, больше 5 лет на этом всем пишу.
Есть месяц, чтобы выучить GoLang + все, что нужно для среднего бэка на нем. Киньте списком того, что надо знать, пожалуйста
1) Работа с основными типами данных, в частности slice и map
2) Работа с указателями и nil
3) Горутины и каналы, мютексы
3) Как структурировать проект
4) Что умеют основные стандартные пакеты
5) Как писать тесты в го
6) Основные внешние библиотеки для работы с сетью, роутингом, базами данных
Вроде этого хватит
И в дополнение, необязательные, но полезные штуки
1) Внутреннее устройство слайсов, map, каналов
2) работа garbage collector
3) Работа с профилировщиком
4) context
Берешь язык, который знаешь лучше.
Если не знаешь оба, то бери го, он проще, и там нет всех этих абстрактных фабрик синглтонов
Пфф, тогда на чем угодно, хоть на JS. Я думал ты задаешь вопрос на чем писать онлайн игорь, которую надо поддерживать и развивать, а ты про петпроект. Вообще на чем угодно.
Только вот:
> 3) Как структурировать проект
Сами гоферы часто структурируют его, как полные мудаки. По DDD вообще единицы.
> 2) работа garbage collector
> Планировщик
Очень мало практической информации.
Тут скорее знания для собеса
ntcn
1. Голанш элементарно ставится. В разы проще, чем тулчейн у типичного фронтера
2. Как сказал этот анон >>528509 юзайте докеры, если еще не начали. Хотя установить голанг проще, чем осваивать докер
3. Публикуй бинари на сетевой ресурс, а фронтер пусть тянет бинарь
> очень желательно с отлеживаением измененных файлов, для перезагрузки сервера
Ребилд сорсов с watch-ем - можно настроить, так же как и с любыми другими платформами
Но вы же вдвоем работаете? Ты хочешь, чтобы по изменениям сорса у тебя ребилдилось у него? Странная идея
В дополнение:
А. Прочти это http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/
Б. Изучай сорс стандартных либ, смотри как тесты к ним написаны. Это лучший учебный материал.
> Хотя установить голанг проще, чем осваивать докер
Типичный сервис - это база, файлуха, кеш, какая-нибудь дополнительная херня, планировщик и только потом код.
Без докера всё это поднимать будет печально.
Все так
Но если хочется максимально light-weight dev cycle, то:
- git pull
- go run
ничего "легче" не придумывается.
Тем более что ОП хотел по изменениям файлов рестарты делать
Я думал, мы обсуждаем поднятие сервиса на рабочей машине фронтендщика. Ему точно не нужно переподнимать го по изменениям файлов, он гошные исходники и не трогает.
А если мы говорим про го-девелопера, то да, проще всё прямо в рабочей системе поднять.
> Лол, а теперь посмотри на языки вроде хацкеля/окамла/раста/свифта
>Хацкель
Для фп-шизиков и математикошизиков, изредка для реально редких и крутых академиков
>Окамл
Никому не нужный ноунейм, в котором модель CSP неудобна
>Свифт
Для гейос шлёпателей.
>Раст
Вот наконец хоть один увожаемый язык назвал.
>Erlang
Вырвиглазгый, почти никому не нужен. Но всё же не ноунейм. И на нем базируется Эликсир, который в свою очередь крайне увожаемый.
Учи и не еби мозги.
Радуйся, что начальник тебя в голанг пинает.
Голанг - не кровавый энтерпрайз, читай исходники стандартных либ и это поймешь.
Джанга - не умрет.
Часто встречаю вкусные вакансии на PHP + Go, часть на PHP, микросервисы на Go. Вскоре предстоит интервью в забугорную компанию на Senior PHP/Golang developer. Я и в PHP не сеньор, в Golang даже не Junior. Сказали, что Go желательно, но не обязательно. У них там Kubernetes и вся такая дичь, а я кроме Docker'a (для локальной разработки) не щупал ничего.
На GO могу писать простые Rest API'шки. Горутины и каналы не трогал.
Поясните почему PHPшные проекты частично переводят на Go?
Чтобы тратить меньше бабла на железо?
Какую логику отдают Golang'у?
Можете привести пример проекта с микросервисами на Go, где основным языком является некомпилируемый язык типа PHP и Python. Что конкретно из логики выносится в микросервисы?
В общем не уверен что дальше развивать, реакты ангуляры для fullstack. Или Golang для бородатого сеньора-бекендера. Цель - 300к в сек, конечно же. Да и PHP + Laravel заебал, писать на нем удобно, легко и скучно.
Зарплата 135к, работаю удаленно. Но я жадный и хочу больше золота.
Кстати, реквестирую курс OTUS по Golang'у. Вроде годнота, судя по программе курса. Там про микросервисы, про то как это всё состряпать в единую работающую хуету.
Есть у кого?
Если цель стать синиор бэкендером в крупной компании, то конечно пхп+го, если востребованность в мелкосреднем сегменте, на удаленках и т.д., то фулстечить. Первое дает стабильность и деньги, но компаний выбор не так и велик, особенно если не в многомиллионнике вроде ДС или Лондона, а второе для мобильности удобнее, по деньгам можно примерно и так же выйти
Есть же опенсорсные реализации уже + статьи на медиуме вида "простой блокчейн в два шага".
Да даже больше скажу, этот ваш блокчейн это по сути эвент соурсинг с подписью изменений, Линус Торвальдс ещё в 2005 году то же самое сделал, когда гит написал.
Тоже хотелось бы увидеть этот курс
В будущем
Результат целый, потому что оба аргумента целые. Нужно, чтобы хотя бы один был вещественным. Делай либо 25.0/7, либо float64(25)/7
>Добрый день. Как в этом языке грамотно работать с математическими действиями? Вот делю я 25 на 7 (25/7) а выводится 3. Что читать?
25.0 / 7.0
Не жалко 50к инфоцыганам заносить?
Вот насчёт OTUSа сомнительно. Курсы у них, может, и нормальные (я хз) - но блог на хабре просто отвратительный. Какая-то абсолютно бесполезная вода, текст ради текста.
Иногда не замечаю, какой блог читаю, и догадываюсь на второй-третьей странице - когда я понимаю, что текст уже пролистал и всё ещё обладаю той же информацией, как во время чтения заголовка.
>Почему
слышал что в основном на Go перекатываются уже разработчики с опытом backend- разработки. И компании рассматривают разрабов, которые пишут на Го или готовы переучиваться.
Готовься к баттхёрту. Если ты учишь го потому что дядя так сказал надо, то пиздарики тебе. А вот если потому что самому интересно — то это божья благодать. Хотя это зависит от того, с каких языков ты пришёл. Если с жявы, то точно пиздарики.
https://github.com/beneG/mad_test
Это тестовое задание в одну говноконтору, надо было сделать фриланс аукцион с корректным обращением с деньгами.
Это моя первая программа на го, и хз почему меня не взяли в эту говноконтору.
Архитектура так себе (про DDD ты явно не слышал), слои логики перемешаны между собой, файловая структура самописная и так себе, гошная специфика тоже так себе. О доставке тоже не подумал, апи задекларировано так себе.
Максимум, взял бы тебя на джуна без обид, ты попросил - я оценил.
Вооот. А на деле я оказался супер продвинутым программером, и сейчас работаю в одной известной конторе и делаю ИИ в авиасимуляторе на крестах.
Всё с вами goферами понятно, чисто формалистский подход и оценка.
> на деле я оказался супер продвинутым программером
Что-то по коду не видно, говнокод, как он есть. Если ты считаешь себя супер-продвинутым, мне стоит тебя огорчить.
> одной известной конторе
Я видел говнокод от множества известных контор, включая Яндекс и Гугл. Ничего эти ярлыки не значат.
>Что-то по коду не видно, говнокод, как он есть. Если ты считаешь себя супер-продвинутым, мне стоит тебя огорчить.
Это первая программа на голанге, после которой я руки мыл с мылом. Ладно ковыряйтесь в свойём goвне сами, а я пожалуй останусь на божественных крестах.
А ты, пидор, покажи свой конфетка-код прежде чем свой носик задирать.
Сначала ты просишь оценить тебя, а потом строишь обиженку? Ну ок.
Свой лепет про первую программу можешь больше не писать, потому что если бы ты хотя бы слышал про азы разработки на бекенде, то попытался бы что-то такое изобразить. Твой код не не-идиоматичен, он просто плохой, потому что ты путаешь тёплое с мягким.
Да и в принципе опытные разработчики как правило сразу гуглят примеры кода и какие-нибудь example-проджекты на стеке X, чтобы понять, как вообще тут принято делать. Ты поленился сделать даже это.
Свой божественный код я бы с радостью тебе показал (ты бы ослеп от его красоты и проработанности), но у меня нет привычки программировать что-то серьёзное дома, рабочий код (понятно) принадлежит не мне, а садиться и лепить примеры чтобы что-то доказать очередному маня-долбоёбу, считающему себя "супер-продвинутым программером" лол я тем более не считаю нужным.
Аргументы я тебе привёл вот тут >>557519 и они достаточно объективные, можешь каждый из них гуглить и разбираться, как делать правильно и как нет.
>Всё с вами goферами понятно, чисто формалистский подход и оценка
>А ты, пидор, покажи свой конфетка-код прежде чем свой носик задирать.
>Это первая программа на голанге, после которой я руки мыл с мылом. Ладно ковыряйтесь в свойём goвне сами
>Aug 24, 2018
спустя полтора года чувстсовать себя солёным и обсирать виноград, которые тебе не достался, это сильно. правильно не взяли.
Ну, тогда было обидно что не взяли. Сейчас дела сложились намного лучше и я думаю было бы херово если б взяли.
Я пришёл обсирать не виноград а яп который ебанут и имеет ебанутое коммунити.
>>557802
Покажи. С радостью.
И смогу скопипастить формальные и максимально размытые доёбки которые подходят всем как гороскопы.
И то что ты не отрицаешь что ты пидор говорит о том что пидоры - говно, так как множество пидоров содержит такого уебана как ты.
Уж ли не для Ил2: Штурмовик ИИ пишешь? Судя по твоему гиту тебя туда взяли пару месяцев назад на джуна или трейни
Посмотрел я его код, выше джуна не тянет. знал бы он плюсы так как выёбывается - был бы совсем другой разговор. в который раз убеждаюсь, что ЯПы бывают разные, а долбоёбы на них пишут одни и те же.
> Я пришёл обсирать не виноград а яп который ебанут и имеет ебанутое коммунити.
То есть наговнокодил ты, а виноват язык и комьюнити? Гениально.
Ему гоферы в штаны насрали
go ахуенный язык, вот тот чел который так и не показал свой конфека-код вообще красавчик. А то пол ./pr ослепло бы.
Да и ваще все вы молодцы. Отсасывайте друг у друга.
Странный ты чувак. Выше уважаемый ананас тебе все объяснил. Чего у тебя подгорает - не понятно.
Ты не писал на паскалевском синтаксисе. PL/SQL - паскаль. Го - си с корутинами и гц.
Бамп
У Elixir/Erlang тоже есть неоспоримые преимущества:
это разработанные не через жопу языки, в которых есть инструменты более продвинутые, чем палки-копалки из го.
Ну и рантайм получше, в основном за счет идеи каждому процессу свою память давать. Вот в BEAM VM асинхронность, да. А в этих ваших Golang / Python asyncio и прочем -- ебучее CSP, которое стало ебучим из-за того, что его пихают везде, даже туда, где оно, блджад, не работает.
бамп годному вопросу
Это копия, сохраненная 10 февраля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.