Это копия, сохраненная 23 сентября 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пщ едва не единственный язык который на уровне синтаксиса позволяет синхронизировать подпрограммы, разве только не Pony или Erlang. Это в 2018 году-то
Дженерики нужны, дженериков нет. Просто смирись.
Обработка ошибок получается охуенно через http://github.com/pkg/errors | в приложениях обычно можно просто паниковать на ошибках.
HTTP-сервер для убер максимального маня-хайлоада: https://github.com/valyala/fasthttp
В 1.8 или 1.9 уже можно "нормально" сортировать через sort.Slice()
Не нужно пиздеть про толстые бинарники, их размер значительно уменьшается одним маленьким Makefile.
Вкатываемся в эпоху докера, микросервисов и адово кошерной сетевухи.
в голосяндру с маскота
Куча всяких репозитариев, пригодится
>>1159641
Просто идиоматичный и популярный фреймворк. Все основные фичи вида middleware, авторизации и прочего уже есть в виде отдельных пакетов, меньше руками писать. Тестами покрыт, стабилен.
Остальное - вкусовщина.
Про echo тоже хорошие вещи слышал, если нравится - бери.
Не сталкивался, можешь глянуть https://github.com/BruceDone/awesome-crawler#go
Вроде там есть варианты
И низя.
WTF?
На хабре статей мало стало.
Вчера нашел тему на хабре, где шизик на полном серьезе говорит, что Go лучше, т.к. в нем нет тернарного оператора и нормальной обработки исключений, из-за чего сложнее писать говнокод. Пиздец просто, только выиграли, нахуй.
> тернарный оператор
Роберт Пайк вообще не осилил сделать язык ориентированный на выражения, хотя в C-подобных языках тернарка - это убожество.
> обработка исключений
В Go обработка ошибок конечно уебанская, но unchecked exceptions не лучше.
Ответь нормально
>Makefile
поясни, интересует проганье под mips, накатив пару стандартных либ ОЧ ЖИРНЫЕ (для mips) файлы получаются, даже с теми твиками которые нашел на SO.
Попрошу подробнее высказывать мысль
Дискорд и вотсап берут ерланг, потому что динамикадрисня. Типичная goмо-логика. А goвно тогда, видимо, не берут из-за статической типизации. Хотя подожди-ка, в goвне же говно без дженериков вместо статической типизации, точно.
>>161695
В пщ искаропки (вшиты в язык) есть средства только для in-process асинхронности. То есть для распределенных систем с миллионами сообщений в день он не дает никаких профитов, все придется велосипедить. А erlang otp - платформа, ровно для миллионов сообщений в день и предназначенная, так что логично взять проверенное временем интерпрайс-грейд решение, а не хипстерскую хуйню от гугла.
Ну как сказать, сейчас блокчейны многие начали пилить на го.
Просто у Го нет какого-то списка требований, что должен знать Гошник. Типа списка фреймворков для джавы
не лучший, а ЛУДШИЙ!!!!11111
Пруфы где?
Держу в курсе
А как эти хайпы появляются?
Блокчейны же не вчера появились, но вдруг стали резко всем нужны.
Мне после джавы больше нравится подход в Go, так как код читаемый получается. Плюс, гарантированно ошибка будет обработана.
Ты можешь влиять на курс своей МММ-валюты, и это совершенно законно.
В голосяндру
Около $3k чистой прибыли
Спасибо, эту я видал уже статейку.
Может так кто-то знает: планировщик полностью эмулирует работу ос по выделению/увеличению памяти для горутины, или же при переключении происходит копирование стека потока ос в буфер горутины и последующее его восстановление?
Спасибо, Таненбаума я перечитаю конечно же.
>и у каждой горутины свой стек
Это полноценный стек, куда прямо SP указывает? Мне интересно просто, как подобное реализованно на уровне пользовательского процесса, ведь прав отображать физическую память на виртуальную тут нет. Плюс ещё масса платформоспецефических условий, например установка того же SEH под Win. И опять же как его увеличивать? Проверять размер между вызовами, а как быть со сторонним кодом? Надеялся, что где-то подробно расписанно уже.
Вряд ли в этом треде ты получишь ответы на свои вопросы. Тут не сидят те, кто задумывается о таких низкоуровневых вещах. А там, где сидят, не разбирались как реализованы легковесные потоки в го.
Лучше на js писать.
>Тут не сидят те, кто задумывается о таких низкоуровневых
В основном тут сидят те, кто го в глаза не видил и считает что языку полтора года
>Это полноценный стек, куда прямо SP указывает
Нет, это все юзер спейс.
>Мне интересно просто, как подобное реализованно на уровне пользовательского процесса, ведь прав отображать физическую память на виртуальную тут нет
Используя системный вызов MMAP.
Спасибо. Ты это наверняка знаешь или примерно почувствовал? И если наверняка, поделись источником, пожалуйста.
есть у кого книга Go на практике на русском?
пакеты с pkg возьми, ora вроде самый развитый
list = ["http://httpbin.org/get"] * 100
Если программа запускается на 1 ядерном сервере, сколько родных OC потоков выделяется для го программы
Я правильно понимаю, что если выполнение операции занимает больше 5 секунд, то уже нужно делать для этого отдельный микросервис?
????
>Я правильно понимаю, что если выполнение операции занимает больше 5 секунд, то уже нужно делать для этого отдельный микросервис?
Как хочешь. В зависимости от задачи. Может быть вполне достаточно просто выполнить в отдельной горутине.
Checked exceptions это вообще пиздец. В джаве их все избегают, а в скалке так и вообще их нет.
Там даже исключений нет? Ну вообще охуеть. Даже в оберон, с которого передрали го, их добавили.
И поэтому люди давно придумали Option/Result типы. Что мешало Go быть типобезопасным и перенять монадический error handling, как сделал Rust например?
да мне, в общем, не жалко
Можно делать динамически слинкованые бинарники через gccgo.
Но бинарники такие по идее медленнее и зависят от кучи либ, что не хорошо.
Есть исключения.
Присоединяюсь к реквесту, чисто ради интереса.
Есть лисп, есть кложура, на чем прод писать будешь, на чем пет проект для гитхаба?
Да. Можно даже под другие платформы компилить.
Как бы тебе объяснить. Мой дед обрабатывал ошибки, мой отец обрабатывал ошибки, я обрабатывал ошибки, а ты не хочешь?! УБЬЮ СКА
ВСЕ, ВСЕ ДОЛЖНЫ ОБРАБАТЫВАТЬ ОШИБКУ СРАЗУ КАК ТОЛЬКО ПОЛУЧИЛИ. ЯВНО, БЫСТРО, НА МЕСТЕ И НЕ ЗАДУМЫВАЯСЬ. ПОЗВАЛ МЕТОД - ОБРАБОТАЙ ОШИБКУ. ВЫЗВАЛ - ОБРАБОТАЙ. НЕ ПРОБРАСЫВАЙ НИЧЕГО НЕЯВНО ВЫШЕ, НЕ ПИШИ THROWS EXCEPTION, НЕ СНИМАЙ С СЕБЯ ЭТО БРЕМЯ ОБРАБОТКИ ОШИБОК. ВМЕСТО ЭТОГО ЯВНО ОТКРЫТО ПИШИ IF ERR RETURN ERR И ПУСТЬ ТАК СДЕЛАЕТ КАЖДЫЙ, КАЖДЫЙ СУКА МЕТОД НА ВСЁМ СТЭКЕ, ЧТОБЫ ВСЕ В КРУГОВОЙ ПОРУКЕ ПОУЧАСТВОВАЛИ, МРАЗИ. ОБРАБАТЫВАЙ ОШИБКИ, СУКА!
То же что и с несколькими потоками на одном ядре процессора
>В Голанге можно компилировать программы, а не запускать их по go progname.go?
Если ты go run имеешь ввиду, то он так-то делает shadow compilation. go run просто создает временную директорию, и туда пихает твой скомпилированный бинарник.
Checked exceptions нужны когда предполагается, что в случае возникновения ошибки, она обработается и выполнение кода в скоупе продолжится.
Но на практике 99% случаев обработка checked exceptions заканчивается логированием и прерыванием процесса исполнения кода. А в оставшихся 1% случаев разработчики сами знают что им нужно и напишут соответствующие кетчи без пинков от компилятора.
Красота. А как можно указать компилятору, чтобы тот из временной директории в мне нужную поместил? (Или хотя бы в текущую).
Решил на выходных вкатиться в говно.
1) Что за пиздец с gopath и прочей хуитой? Я просто хуею, они не могли в 2018 нормальный тулинг запилить? Говно говном, просто пиздец.
2) Я чего-то не понял, или gofmt действительно делает отступы табами? Вы совсем ебнутые тут?
В целом первое впечатление от языка - все через жопу, кругом какие-то костыли, как в 80-ые попал. Ну хоть в имаксе поддержка на высоте.
А вот и формошлепы подоспели. Ну почему я не удивлен?
>>188774
Проще != легче. Но есть такое ощущение, да.
Алсо:
https://groups.google.com/forum/#!topic/golang-nuts/93t0LWvHrKM
Прелестно, блядь. Лоллирую. Документация юзает 8 пробелов. Темплейты в плагине плейграунда юзают 4 пробела. gofmt юзает таб, ширина которого по умолчанию 8 пробелов, но который все ставят на ширину 4 пробела (или меньше), чтобы хоть как-то умещаться в 80 символов. Ух, прям как в старые добрые, а ну пошли все ГОвно вилкой чистить, ух епты бля.
Все юзают столько пробелов, сколько захотят, gofmt только приводит все к единому стилю во всех проектах.
У меня, например, vim-go (или сам vim, уже не помню) все приводит к 2 пробелам, просто потому что я так привык, но в репе у всех будет код, отформатированный по gofmt.
Анон, я даже не знаю, что тебе сказать, кроме как "перечитай пост, на который отвечал".
Нет, фигурно-скобочным языкам на это вообще наплевать.
Настолько, что используется в Google и на нем написан Docker и прочие Kubernetes.
-Насколько хорош Go?
-Docker
-Чем Go лучше остальных языков?
-Docker
-Вам нравится писать для каждого типа данных отдельную функцию?
-Docker
-Вы любите жрать говно?
-Docker
Grzegorz.
сырой и хайп прошел
https://github.com/ksimka/go-is-not-good
Мне вот интересно, у каких еще молодых языков есть целые репы с перечислением того, что в языке было сделано неправильно и почему не надо его использовать?
Нахуй я запятую поставил, грамотей?
JS не дизайненый язык. Он просто случился и от него не убежать.
У го же совсем другая проблема. Он не тянет на "современный" язык.
Особенно охуенны вот эти:
>no constructors
>no OOP
>no semicolons at line endings
>is compiled
>pointers are a mess
>no pattern matching
90% сводится к "а в моем языке есть X а тут нету значит плохой язык".
Потому что многие вещи первой необходимости отсутствуют. Хотя из этого списка дельно только pattern matching, остальное не особо важно
>no semicolons at line endings
Вообще-то там есть семиколоны в конце строки, просто они (приготовьтесь) НЕЯВНО ВСТАВЛЯЮТСЯ КОМПИЛЯТОРОМ. Поэтому, например, нельзя опускать запятую в конце строки внутри многострокового литерала - Роб Пайк вставит туда точку с запятой. Го такой модный и простой.
Алсо, 90% там сводится к "нет дженериков" и "я повелся на хайп, а потом понял, насколько это хуевый язык для написания чего угодно кроме хелловорлдов".
Нужно быстро вкатиться в MongoDB и CouchDB на гошечке и написать небольшое файловое хранилище. Какие статьи покурить?
С заглавной, неуч.
Я так понимаю, язык создавался ставкой на то, чтобы в момент потребности обобщенного программирование юзать interface{}
Что логично, так как обобщенное программирование не является частью парадигмы статической типизации и с точки зрения статических типов надо создавать общий тип для таких ситуация (например тип number для всех чисел).
Но пришла лига с утиный синдромом из статический языков и стала навязывать, что вот нужно пилить им дженерики потому, что эта шляпа в виде MoiHui<MoiZalupy<Jopka>> спасает их во время компиляции и вообще очень нужна, хотя выглядит больше как баг-фикс и по другому эти бараны мыслить просто не могут.
>Насколько хорош Go?
Идеален, ты сравни с жабой, вкатываться в ее инфраструктуру будешь годами, хотя писать будешь тоже самое.
>Чем Go лучше остальных языков?
Ты программируешь как обычно, но код уже работает асинхронно под капотом, никаких блядских асинков-авэйтов и прочего ада (тем более промисы и калбэки), то есть, тебе вообще не надо держать в голове, что этот код будет синхронным, а тот асинхронным.
Для сетевых приложений - это серебряная пуля.
Так же статическая компиляция, которая исключает проблему зависимостей на разных машинах.
>Вам нравится писать для каждого типа данных отдельную функцию?
Чаще использую тупо interface{}, поясняя в документации, как это всегда делалось в динамик языках.
А какая разница? Документацию все равно писать, тесты тоже. Ничем бы меня сильно дженерики не спасли (кроме любви к долгой компиляции)
>Вы любите жрать говно?
Человек сам выбирает свои рамки свободы, если ты мечтаешь жрать говно и стыдишься этого, то ты более ущербен, чем человек который берет и делает что ему нравится.
> обобщенное программирование не является частью парадигмы статической типизации
Но оно необходимо для строгой статической типизации, чтобы не проебывать типы и отлавливать все связанные с ними ошибки на этапе компиляции. Ваш interface{} делает из Го динамикопарашу. Но для вас все нормально, ведь по другому вы думать не можете.
> А какая разница? Документацию все равно писать, тесты тоже. Ничем бы меня сильно дженерики не спасли (кроме любви к долгой компиляции)
> Не очень-то и хотелось! Только выиграли!
И как заметил господин выше, это превращает го в динамикодрисню с отсутствием гарантий, из-за которых статическая типизация имеет смысл.
Сектанты всемогущего компилятора подъехали, которые верят что компилятор защищает их от всех известных микробов ошибок. На самом деле 90% офисных клерков, тупо дрочат на автокомплит в IDE и не осознают, что проблема с типами преувеличина.
> Чаще использую тупо interface{}
Хех мда щя бы в 20!8 кастами и свитчами кормить бога проёбанных тактов.
>компилятор защищает
Но ведь так и есть на самом деле.
А разгадка проста - компилятор умнее 90% местных дегенератов вроде тебя, например.
> Сектанты всемогущего компилятора подъехали, которые верят что компилятор защищает их от всех известных микробов ошибок.
Straw man argument во всей красе.
> проблема с типами преувеличина
Анус твоей преувеличен.
Есть подходы, дающие больше гарантий, есть подходы, дающие меньше. В промышленной разработке имеет смысл выбирать решения, дающие больше гарантий.
Не буду пересказывать то, что обсасывается с первых дней выкатывания Go: https://www.darkcoding.net/software/go-the-price-of-interface/
interface{} — это дорогой хак. Дороже только рефлексия. Они не просто так существуют, но ты почти наверняка везде использовал его неоправданно.
Кому-то нужна OCaml или Rust внутривенно, чтобы понять, что вообще есть такое статическая типизация не та поебота, что есть в Go
Правильно боишься - я бы тоже на твоем месте боялся прилюдно выставить себя дилетантом. Но ничего, некоторым к такому не привыкать.
мимо
Определённо кто-то должен создать язык с возможностями жса, элегантностью питона и байтоёбством крестов, да ещё ии с ООП. Создатели пщ хоть попытались
Это заскринить нужно.
Да жаба всегда сосала. Бесполезная вещь. Что ещё скажешь?
То есть это нихуя не самый продвинутый язык в области? Что тогда брать? Ерланг или Эликсир?
>То есть это нихуя не самый продвинутый язык в области?
Нет, Го это бейсик с корутинами
>Что тогда брать?
PHP
Нахуй пыху, она слишком простая и перекладывает работу на операционку.
> То есть это нихуя не самый продвинутый язык в области
Неужели еще не все заглянули сюда https://github.com/ksimka/go-is-not-good? Вставьте в шапку штоле.
Swift тоже подойдет.
Лол, если копнуть, этот так.
Нафига вы тащите сюда хипсторские языки, где до сих пор нужно явно писать асинхронный код? Что это за двухтысячные вы сюда тащите?
> Нафига вы тащите сюда хипсторские языки, где до сих пор нужно писать код? Что это за двухтысячные вы сюда тащите?
Когда костыль в виде точки для вызова анонимных функций уберут, тогда и поговорим.
Нет, сам иди нахуй, каникуляр. Я много гуглировал и нашел только разные убогие рест-сервисы для сохранения и получения инфы о пользователях. Но здесь не тот случай. Здесь нужно работать с БОЛЬШИМИ зашифрованными файлами, которые передаются и собираются по частям, которые можно обновлять, находя файлы по разным параметрам, а потом заливать в GridFS.
Каникуляр, дело не в языке, а в том, что необходимых библиотек нет ни на Java, ни на Go. Смотрю тысячи разных фреймворков для создания REST API, все работает))) искаропки))) запустил и заработало)))) но загвоздка в том, как локально хранить и обновлять файлы, полученные по частям, дописывать к ним байты и прочее.
>дело не в языке
А в том, что ты обычный наследственный дебил.
Впрочем, чего и ждать от вебмартышки.
>Впрочем, чего и ждать от вебмартышки
Ой блять, каникуляр ебучий, иди нахуй. Любая работа это макачество. Какой язык ни возьми, везде пишут неповоротливую опердень. Вероятно, ты какая-нибудь легаси C++мартышка, coq-петухан, хаскелист-борщееб или прочая нечисть. Кем еще ты можешь быть, учитывая, что ты сидишь на сосаче, и 95% задач в айти это разное крудошлепство?
А как ты обойдешся без interface{} например в telegram bot api?Где на каждый запрос возвращается структура, в которой поле Result меняется в зависимости от запроса?
*тип поля
Но как её можна избежать в этом случае, не создавая новую структуру под каждый запрос вручную?
>У меня на работе за такое ногами пиздят.
Правильно, за го в проде надо ногами пиздить того, кто до такого додумался.
Для написания ботов ИДЕАЛЬНО подходит любой язык, на котором есть либа для работы с апи этих твоих ботов. Каналы и асинк есть уже везде. Спойлер: у тебя синдром утенка.
У него опыта мало, он повторяет за другими.
Есть, но ньюфаги в него не умеют.
>>196360
Для ответа реализуешь свой декодер, который сначала в дженерик-структуру парсит Result, а потом уже возвращает соответствующую структуру, реализующую общий интерфейс Result. Не знаю, какой там API, и времени сейчас более конкретно отвечать нет, но в похожих ситуациях я как-то так действовал. Можно и сразу дженерик-структуру возвращать, но при этом ты будешь много лишних пустых полей тягать и потеряешь все профиты от типизации. interface{} вообще ничего не решит здесь и лишь размажет боль с определением типа ответа по всему проекту.
result - указатель на структуру. Декодер заполняет response и соответственно структуру на которую передан указатель.
Зачем её передавать?
Ты можешь в свой функции заполнить response и вернуть то, что тебе надо.
Тогда interface{} это map[string]string. И тогда это только раздует код потому что нужно декодить json уже два раза.
Нет, не избавляюсь. Он же присутствует в коде. Нет, не избавляюсь. Он же присутствует в коде. interface{} это что-то динамическое, неопределённое, поэтому я думаю, он здесь уместен.
Мне просто лень копаться в коде и разбираться почему он там.
В общем, надо стараться его избегать, только для всяких неопределенностей использовать.
Но не писать, как замену дженерикам, типа передал в функцию, определил тип, вызвал преобразование согласно типу
Да там пиздец, json.UnMarshal(byte[] string, &result). Резалт по ссылке передаём, сделать возвращаемое значение слишком мейнстрим.
Ты идиот?Нету проблемы распарсить json, есть проблема что одно из полей неопределённого типа.
Проорал с тебя. Здесь нету класов, здесь структура, и ты передаёш её для того что бы заполнить.
Вопрос в том как обойтись без использования interface{} для поля с неопределённым типом. Смотри сначала о чём говорили, до того как гаписать комментарий.
runtime: goroutine stack exceeds 1000000000-byte limit
fatal error: stack overflow
runtime stack:
runtime.throw(0x4b7f26, 0xe)
/home/user/golang/go/src/runtime/panic.go:605 +0x95
runtime.newstack(0x0)
/home/user/golang/go/src/runtime/stack.go:1050 +0x6e1
runtime.morestack()
/home/user/golang/go/src/runtime/asm_amd64.s:415 +0x86
goroutine 1 [running]:
main.main()
/home/user/golang/my-go-src/10.go:5 +0x130 fp=0xc46006bf80 sp=0xc46006bf78 pc=0x487e10
runtime.main()
/home/user/golang/go/src/runtime/proc.go:195 +0x226 fp=0xc46006bfe0 sp=0xc46006bf80 pc=0x428b16
runtime.goexit()
/home/user/golang/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc46006bfe8 sp=0xc46006bfe0 pc=0x451321
exit status 2
Оправдывайтесь, говнари. Зачем есть 1000000000-byte limit
>2k18
>считать наполнение массива из более чем миллиарда элементов чем-то ненормальным
Может еще и 640к хватит всем?
Мне не интересно спорить с тобой, я пишу на Питоне за деньги и на ассемблере и чём угодно в качестве хобби.
Если у тебя ошибка, то ты делаешь что-то не так. Посиди, остынь, перепиши код в соответсnвии с гаедлайнами и всё будет хорошо.
Kotlin и Java, когда речь идет о чем-то, сложнее реста-стейтлесс агрегатора данных, параллельно запрашивающих источники данных и объединяющих данные в модель.
>вообще не надо держать в голове, что этот код будет синхронным, а тот асинхронным.
Какой наглый пиздёшь.
Блядь, та же жаба этот котлин, такие же жабовские толстенные фреймворки, которые жрут столько памяти, что не умещаются в 512 ОЗУ где какой-нибудь php летает еще и с базой. Те же тормоза пока JIT не стартанет, а потом под нагрузкой не упадет это все и заново начнет стату собираться чтобы скомпилить но уже на тот момент все упало от таких маневров Те же избыточные либы, вкатиться в которые тебе придется читать целые книги хотя нужно 1% функционала из этого оверхеда и столько же времени, чтобы решить какую-то мало-мальскую проблему.
Если у тебя не целая стойка серверов, про жабу забудь, это игрушка жирных компаний, которые могут позволит себе тонну железа и тонну индусов чтобы очередную фабрику фабрик поддерживать
Поясни, все так и есть, ты вызываешь внешнюю функцию, происходит переключение контекста, если ядер много то может быть даже на соседний поток попадет. Делаешь запрос в бд, происходи переключение, обращение к файлу - переключение, http запрос переключение и так далее, ты даже не держишь в голове, у тебя все асинхронно у этого есть своя цена, нужно дробилки прирывать руками, но это того стоит чтобы писать асинхронно синхроный код, никаких калбэков, никаких промиссов, никаких асинков
/thread, лол.
От чего зависит? Фазы луны? Системы? Железа?
Хуйню написал, все понял.
С И Н Х Р О Н И З А Ц И Я
В рантайме также. Памяти жрет чуть меньше, бо инлайнит везде где только можно, в отличии от джавы (хоть invokeDynamic, но все равно). Компилируется на 2-5% дольше. Джарники немного толще.
Нет, также как ассемблер.
Слайс - это структура с тремя полями: указатель на массив, длина, вместимость
Поэтому, когда передаешь слайс, он передается по значению ( то есть копируется, по сути), но так как слайс содержит указатель, то мы можем менять значения в массиве
А в странах зарубежья получше ситуация?
В Го есть инкапсуляция и полиморфизм, нету только наследования( оно есть только включением)
Согласен, а наследование и нинужно, подход composition over inheritance приводит к меньшей связанности (low coupling). В принципе можно писать так же, как и привык на Java/C#
Я только в си-стайле умею.
https://pastebin.com/TYzTQxE9
Ругается на 30 строчку, типа она вне цикла. А как её поместить в область цикла?
Нужно чтобы у пользователя было ограничение по времени на ввод следующего числа.
Я попробовал переместить блок кода вниз, без функции, но тоже хрень. Теперь таймер работает норм, но он реагирует на то, был ли ввод поздно или не только после ответа.
Твой continue находится в отдельной горутине и не соотносится с for.
Кстати, зачем ты делаешь err = nil ?
Прямое управление памятью?
В каком смысле?
Можно написать что-то типа
func myfunc(){
//Do Something
}
func main(){
go myfunc()
go myfunc()
}
Я в языке не шарю, изучаю его только час и возможно делаю ебалу. На первом пике функция, которая должна быть дублирована на кучу потоков. На втором пике кусок кода с циклом и вывод программы. Почему-то каждая горутина не входит в бесконечный цикл как задумывалось в функции и выполняется один раз.
Скинь куда-нибудь исходники, попробую запустить у себя
Массив - это беспрерывное множество байтов. Все остальное - это связанные списки основанные на указателях.
Ну, есть хэндлер, который принимает гет параметр - строку. Её нужно передать в канал, который читает функция обрабатывающая эту строку. Соответственно канал нужно передать и в хэндлер и в функцию которая обрабатывает строку. Вопрос в том как это лучше сделать.
heroku?
Все равно как-то малопонятно. Почему канал нужен в хэндлере? Прочитал гет - передал в горутину, забрал из нее
Лучше скинь код, который есть на данный момент, а то сложно понять.
И еще посмотри в сторону net/context
Описываешь ситуации специально для тех типов, которые хочешь принимать. Удобная альтернатива перегрузке.
Необходимость принимать всё подряд невообразима в реальных ситуациях. Разве что для списка, но слайсы могут быть из чего угодно и этого достаточно.
Кодогенерация тогда может подойдет?
>Необходимость принимать всё подряд невообразима в реальных ситуациях. Разве что для списка
))
> то она будет вызываться кучу раз
Да.
> создавая десятки потоков
Нет. Ты как вообще здесь очутился? Горутины легковесны, потоков ОС гошный рантайм без надобности не плодит, поэтому горутинами прямо так раскидываться можно без подводных камней.
>stuck in 70s
Со временем всё больше понимаю, что ничего слаще редьки я в жизни не пробовал.
Go - это Си, там где исправлена всё, что действительно застряло в 70ых.
Без хеадеров, с поддержкой параллельности, go get и так далее.
А все эти претензии, мол нет ООП, эррорхендлинга, указатели там.
ООП не работает.
Эксепшены вредны.
А к указателям придираться вообще бред. В C/C++ их не любят за опасность. Они больше не опасны.
> Go - это C
C с GC и тяжёлым рантаймом? Анон, у тебя всё с головой в порядке? C done right - это про Rust, а не про это поделие для микросервисов.
Для Go есть хорошие IDE VsCode и Goland, я пишу в последней.
Го хорош своей реализацией конкурентности через Горутины. А вообще Го используют для микросервисов
Приходится прикладывать огромные усилия, чтобы код хоть сколько нибудь большого проекта оставался хоть по минимуму читаемым.
Ничего нового и революционного в его реализации нет. По моему такое даже в D есть. Но за D не стоит Google.
В Го наоборот достаточно читаемый код. Плюс автоматическое форматирование. Так что понять код на Го проще чем на той же джаве
> Это говно вкуснее того говна.
Го код читаемый только от того, что больших проектов на нём раз-два и обчелся. Ну и Java - далеко не лучший ЯП на земле.
Нет таких, но есть языки с большим потенциалом. Те же Rust, Swift, Scala.
Вангую, что нет, так как он объективно требует некоторых интеллектуальных усилий для его освоения. Большинство же кодомакак всю жизнь пишут на вариациях бейсика, который они выучили еще в школе: шаг влево, шаг врпаво - не могут, не понимают, появляется баттхерт и они уходят в отрицание.
Впрочем, ничего плохого в этом нет, раст - нишевый язык.
> так как он объективно требует некоторых интеллектуальных усилий для его освоения.
Конечно потому что ТУПЫЫЫЫЕ, а не потому что в нишах в которых пишут на скале-жаве-свифте чаще всего просто нахуй не всрался системный язык без сборщика мусора.
>>208831
> Ничего нового и революционного в его реализации нет.
Вот тут плюсо-растоблядь говорит ровно обратное – https://youtu.be/SsEMc17Kzo4?t=46m12s , в то время в Д сборщик мусора течет как сука, это норма, и никто фиксить не собирается.
>в нишах в которых пишут на скале-жаве-свифте
Перечитай пост, на который отвечаешь.
В свифте, кстати, точно такой же rc вместо gc, как и в расте.
>>208826
Горутины есть во всех современных языках.
>>208836
Это был первый промышленный язык, код на котором выполяется в виртуальной машине. Write once - run anywhere. Это классика, это знать надо.
>Это был первый промышленный язык, код на котором выполяется в виртуальной машине. Write once - run anywhere. Это классика, это знать надо.
На самом деле, просто случайно сложившиеся обстоятельства.
Потребности у индустрии в джаве не было.
И что такое "промышленный язык" ? Нет такой вещи в природе.
> И что такое "промышленный язык"?
Видимо он противопоставляет "промышленность" есть языка "академичности".
В расте нет gc. Там где нужно, rc подключается в качестве библиотеки, все явно.
Бэкэнд, микросервисы.
>Даже в оберон, с которого передрали го, их добавили.
А есть ссылка? На то, что исключения добавили, а не передрали.
Нет, конечно, на го писать - самого себя не уважать.
На этом тред предлагаю считать закрытым.
> Настолько, что используется в Google
Оценочная система уровня /b/.
> написан Docker и прочие Kubernetes
Причем оба работают как говно и регулярно падают, а об их "стабильности" ходят легенды?
> а об их "стабильности" ходят легенды?
Разве что в твоем манямирке, хороший софт сюда же дополнительно инфлюксы всякие, работает не хуже плюсоговна, и заметно лучше жаваговна.
мимопроходил
ребят, как ебилдить с сорсов? Хочу проксю собрать, а go get не пашет на официальный репо. Да и вообще где мой mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make -j4 && sudo make install
https://github.com/Yawning/obfs4
Rust — это ML/C гибрид. И без намека на ООП
>понравилось.
говноед.жпг
>Что стоит учить вместе с ним, чтобы начать извлекать из этого профит?
Какой-нибудь язык программирования.
Лол, джява. JVM сосёт хотя бы уже потому, что там нет никаких встроенных механизмов асинхронности: ни грин тредов или корутин как у гошки или эрланга, ни эвент лупа как у ноды. Хуева туча либ несовместимых между собой от вертексов до котлинкорутинс. Это просто старое отсталое говно, на котором писать ансинхронщину и параллельный код больно и неудобно.
>JVM сосёт хотя бы уже потому, что там нет никаких встроенных механизмов асинхронности
в скале и кложе есть (остальные жвм-языки ненужны (за исключением легаси))
Параллельный код и на Go - боль. И что не очень приятно, так это то, что на Go асинхронный код == параллельный код.
Ебать быдлокод.
Нет там нихуя, ты не понял суть, у тебя есть либы но экосистема к ним не готова, вот есть у тебя акка и квазар или вертикс - збс. (они конечно сосут у го по производительности и потребления памяти, но суть не в том). но толку в этом немного, потому-что большинство либ в эоксистеме их не используют, ты будешь просто обмазывать ими многочисленные тредпулы со страым блокирующим говном.
Проблема в том, что асинхронность по дефолту проще, чем многопоточность, ибо с ней тебе не нужны мьютексы, локи, каналы и все вот эти вот примитивы синхронизации. (Хотя каналы могут быть полезны и в однопоточном евентлупе). Го же вынуждает скатываться в многопоточное программирования, когда тебе нужен просто асинхронный код.
>Проблема в том, что асинхронность по дефолту проще, чем многопоточность, ибо с ней тебе не нужны мьютексы, локи, каналы и все вот эти вот примитивы синхронизации.
Угу. Вместо этого тебе руками нужно выполнять работу планировщика, вручную организуя каждые пять строчек кода.
Не нужно. Всё что тебе нужно - это писать await перед асинхронными вызовами. Это куда меньшая когнитивная нагрузка в условиях, когда сам язык тебе никак не помогает писать многопоточный код (например как Rust).
>Всё что тебе нужно - это писать await перед асинхронными вызовами
Что еще спизданешь, петушок?
async function yoba(){
for(var a=0;i<10000000000000000000000000;i++){
console.log(i);
}
}
await yoba;
мой батя большооооооооооооооооого размера
Жабан поломался, несите следующего.
Типобезопасность это по-простому, когда у тебя не может быть нулевых указателей (null/nil), так что нет.
Ты так говоришь, как будто в го-тредах сидит кто-то еще, кроме го-хейтеров.
Я уж молчу, что об этом даже в шапке написано (шапку тоже гохейтер пилил?), такое-то отрицание.
Я не го-хейтер, но сижу. И я такой тут не один.
Что именно там в шапке написано?
Если ты про дженерики, то дженерики - это не предмет острой необходимости.
>Что именно там в шапке написано?
>>Дженерики нужны
Лол. Обожаю это классическое го-отрицалово.
>го типобезопасный?
>нет
>почему?
>нет дженериков
>дженерики - это не предмет острой необходимости
Ненужно, тольковыиграли, ага - классика. Ты понимаешь, что вопрос был не в том, острой необходимости этот предмет или тупой, а в том, типобезопасный го или нет? У тебя манера ведения дискуссии один в один как у религиозных фанатиков, вот ей-богу.
>Не нужно пиздеть про толстые бинарники, их размер значительно уменьшается одним маленьким Makefile.
Можно чуть подробнее об этом?
Нельзя, иди нахуй.
После компиляции натравливаешь strip на бинарник и пакуешь upx-ом.
>Го код читаемый только от того, что больших проектов на нём раз-два и обчелся
ЛОВИТЕ НАРКОМАНА
Бля, как же меня расстраивает вот эта хуйня. Почему человеки недооценивают статическую типизацию? Может быть их стоит заставить код на питоне, который хуй потестишь и который кидает runtime error где-то глубоко в проекте из=за того, что опечатался, нет метода, проебал параметр
Ебанулся?
Ты блять уёбок поехавший. Ты когда-нибудь писал компилятор или что-нибудь другое не менее сложное с тучей похожих объектов? Не возможность построить чёткую иерархию наследования ещё тот головняк в Go, которого нет с C++ или Java.
Забудьте уже про эту поебень. Её придумали для джунов и интернов в Гугле.
Человеки успешно ебошат на жс, пыхе, питоне, руби, ерланге и в хуй не дуют. Осло, почему в пример ущербности динамикопараши всегда ставят питон при таком то ворохе динамических языков? Это из-за сильной типизации так пичот?
sync.WaitGroup
> всегда ставят питон при таком то ворохе динамических языков
Антош, ну тi чего? Петно популярнее и извеснее, чем то, что ты перечислил. Вот я пишу на Лисп. Если заменить Питон на Лисп в моём утверждении, тебе станет понятнее? НИ-ХУ-Я Скорее наоборот.
> жс
Последний ECMA6 отличный язык, но там свой браузерный мир.
Благодарю
О! Норм пацам, умеет в CMake.
Просто сделай go get -u имя репы/..., где до тулы. Можешь склонить, а потом go build ./... и go install ./...
Потом ищи в $GOPATH/bin твою проксю.
> Использует yaml как конфиг.
Ты че сука ты че, а где конфиги хранить? В плоском key value что ли? В 20!8-то году?
Обоссанка, как ты будешь свою иерархическую простыную править руками? Эту поебень даже парсить трудно шо пиздец. Лучше уж Джейсон Стейтхейм.
А сама суть конфига это не key-value пара блядь? Пошел нахуй. Монгу поднимай да храни.
Ещё одини школьник обосрался
Вообще-то становится хуже, именно от тебя.
Сначала говнокодят и юзают yaml в конфигах, а потом просят удалить sync.Cond. Если ты долбоёб, и не знаешь нахуй нужны кондвары, то иди нахуй
https://github.com/golang/go/issues/21165
golang-book
в чем проблем хуярить куски в PUT с Transfer-Encoding: chunked и класть их
потом хоть мамке за шиворот ?
>можно указать компилятору, чтобы тот из временной директории в мне нужную поместил? (Или хотя бы в текущую).
>
go build
> файлы большого размера
А как насчет компрессии на клиенте и декомпрессии на сервере? Например используя LZMA.
Если файл больше предела то сжать его соответствующим шакалом.
Вот поясните для идиота, что такое микросервисы? Вот я хочу научиться кодить на Go. Дайте мне 5 примеров петпроджектов с МИКРОСЕРВИСАМИ.
Теорию читал, но без примеров нипанятна
Вот представь вк. Теперь раздели функционал, который там есть, на модули. То есть, есть модуль, который ответственный за работу с музыкой, модуль на работу с видео, модуль на фотки, модуль на написание коментов и тд.
Ты типа разраб вк, и решил запилить новый суперплэер для видео. В монолите, тебе бы пришлось для тестов, работать со всем сайтом. А тут, ты просто отключаешь модуль с видео, который есть, подключаешь свой и радуешься.
Все верно. Добавить стоит только то, что каждый микросервис может работать независимо от других. Хотя почему-то часто это игнорируют, и получается тот же монолит, только на словах микросервисы
Как задискаверить сервис в интернетах?
Делаю p2p нетворк и для связи нод хотелось бы использовать Discovery протокол без зашитого IP адреса seed ноды.
Текущие uPnP/SSDP - дискаверят только в рамках LAN.
DHT/PEX исползьуют предопределённые seednode.
ХЗ как дискаверить свой сервис в сетке.
"Откуда вы все лезете"(с)
Иди почитай как сетевые протоколы работают (в частности tcp vs udp и почему только в локалке бродкаст работает)
никак
Алёша, поверь, Я знаю о протоколах TCP больше чем ты. Ибо CCNP. Они тут вообще не при чём, Васян!
Вопрос открыт.
Маску подсети посчитать сможешь, сисимипи?
Бро, в этом треде тебе точно не помогут, тут одни токсичные школьники (голанг же!). Создай свой тред про п2п, ну или оживи networking thread например: https://2ch.hk/pr/res/1189320.html (М)
Справедливости ради, я не ебу, как забутстрапить сеть без сиднода, и не уверен, что это возможно - но тред про п2п точно лишним не бывает, может кто и подскажет каких-нибудь интересных альтернатив
боку но пико
golang-book
Потому что ты IPPidr.
Спасибо, понял теперб
почему утечка ?
А как определял факт утечки?
у тебя Same возвращается при первом несовпадении, а go Walk завершается только при исчерпании канала. В итоге, при несовпадении одна или две горутины навечно блокируются и держат ссылку на t *tree.Tree
До выхода из главного потока.
>для сетевых приложений и микросервисов
Каких приложений и микросервисов? Ну что бы сориентироваться, а то кругом какое то говно.
смузидизайнеры используют его для своих выебонов
И то, что судить язык по конкретному коду - это неправильно.
Тем более, что докер зависит от ряда системных настроек и способа установки. И если ты неправильно его готовишь, то сам дурак.
С клиентом под этериум не работал, он запросто может оказаться куском говнокода.
а чего еще в го нет? Мне вообще не очень этот язык понравился по синтаксису и по интеграциям с ide и вообще...
Меня подкупило легкость создания бинарников. До этого смотрел на c# и там пиздец полный в этом плане. Чтоб создать 1 .exe нужно целый ритуал выполнить, а потом этот exe будет помещен черт знает куда и вместе с ним будет куча других файлов. А тут все просто, нажал кнопку и вот тебе бинарник. Можно было бы питон, но там тоже пляски с бубном нужны чтоб в бинарник скомпилировать.
>VSCode
ну я вот пытался в нем писать. У меня так и не получилось автоматическое форматирование выключить. Вернее удалось, но только полностью. По сохранению файла он просто брал и все пробелы в табы конвертировал (не надо говорить как надо или не надо. Я хочу пробелы и го умеет работать с пробелами). Проверка ошибок происходила только по сохранению файла... и все такое. Очень неудобно. Скачал goland и чуть получше стало.
>>242831
>У тебя там хранится "имя-> значение"?
Нет. Там слайс структур http.Cookie
Сука, проорал на всю базу.
В Го нет механизма исключений, так что обработка ошибок - дело рук самого программиста
Что-то тут очень неладно. Возможно разработчики решили что с такими решениями они поторопились. Да и ООП там есть, проста замаскированный под структуры.
Паника это не аналог исключениям в других языках. Паниковать стоит, например, в тех случаях, когда в ходе работы твоего приложения его состояние стало невалидным и кроме как тушить свет уже ничего не остается. Рандомный пример: на входе какой-то функции принимаешь interface{} и ассертишь его в какую-то свою структурку. В определенный момент ассерт не проходит (разработчик по ошибке стал передовать в функцию какую-то ебалу), хотя по логике работы программы - должен. Вот тут можно и запаниковать.
антуан, ну ты совсем поехавший, раз в таких гавнофреймах копаешься..
уж лучше займись <?$PHP ?%PHP>
ну, в жабе или сисярпе это будет Object какой-то, один хуй по сути.
При чем тут пыха? Мне надо сделать интерфейс к бэкэнду, который написан на го. Куда я пхп запихну?
А в фреймах я копаюсь из соображение что если они есть, то их писали с той же целью. Зачем пилить велосипед?
юзай buffalo, из full stack веб фреймворков это самый адекватный. там и примеров дохуя:
https://gobuffalo.io/en/docs/examples/
Как раз читаю про него. Выглядит ничего так, действительно куча примеров. Наверное начну с него. Спасибо.
>имплаинг C#
Мне мама так сказала
А еще, сайтик на C# всего-то потребляет 1гб траифка в день. Отличные, нескучные окна
> Охуеть, в первый раз слышу, чтобы САЙТ потреблял траффик, а не пользователи. Слушай, мне иногда хостер письма пишет, что я дохуя траффика потребляю и любезно предлагает перейти на тырпрайз тариф. Я отказываюсь, конечно.
Но не подскажешь, как можно оптимизировать сайт чтобы траффик уменьшился?
>ли. Слушай, мне иногда хостер письма пишет, что я дохуя траффика потребляю и любезно предлагает перейти на тырпрайз тариф. Я отказываюсь, конечно.
>Но не подскажешь, как можно оптимизировать сайт чтобы траффик уменьшился?
использовать прогрессивные фронтэнд-фреймворки )
Какая разница какие фреймворки использовать, если пользователю надо передать одинаковый объем информации - условно картинку и текст? Про UI речи не идет, он простейший.
>Но не подскажешь, как можно оптимизировать сайт чтобы траффик уменьшился?
1) https://www.techrepublic.com/article/how-to-configure-gzip-compression-with-nginx/
2) https://cdnjs.com/
Во-первых, ты ответил не мне, а во-вторых про cdn и компрессию я знаю и использую. Другое дело, что это уменьшает траффик потребляемый ПОЛЬЗОВАТЕЛЯМИ а не СЕРВЕРОМ.
>В стдлибе еще unsafe используется, но это не повод его в своих приложениях направо и налево юзать.
в unsafe не гарантирована обратная совместимость, panic-recover подпадает под соглашение и будет работать на спецификации 1.x
>Паника это не аналог исключениям в других языках.
Ну-ка, поясни чем panic(myError) и recover() тремя вызовами выше не аналог Raise - Catch в других языках? кроме того, что философски это не Go-way
Напиши приложение с поддержкой oauth2, REST API, разделенное на микросервисы, с использованием Mongo. Потом залей всё это на Google Cloud.
Я парсю xml. Миллиарды XML. ЭСФ/УПД
В кодировке WINDOWS-1251 :-(
Потому? что в Российском формате электронных документов они в сраном cp1251
>Не ну так-то в ~2 раза меньше байт на тоже количество информации.
Это xml. Значительная часть xml это "<>=\n + пробелы.
Так что выигрыш минимален.
Зато минусов - жопой жуй.
Миллионы готовых библиотек/генераторов/линтеров/парсеров не работают без перекодировки.
Перекодировка в много потоков память зажирает капитально. Мне 16 гигов на рабочем сервере не хватает уже.
* В России 95% товаров народного потребления импортные. Зачастую импортный товар сохраняет оригинальное название. Представьте какая каша приходи в электронной Счет-фактуре в кодировке WINDOWS 1251?
jour d'Г©tГ© вместо jour d'été(летний день)
О чем они, блядь, думали?
>в Российском формате электронных документов они в сраном cp1251
А каким ведомством это регулируется? У них есть законодательные акты, обязывающие их использовать эту кодировку?
Формат установлен Минфином.
Смотри
>Приказ ФНС России от 24.03.2016 N ММВ-7-15/155@ "Об утверждении формата счета-фактуры и формата представления документа об отгрузке товаров (выполнении работ)
http://www.consultant.ru/document/cons_doc_LAW_197242/c397bb147d7ea38a45fd3a950d23700fb9fcf3e2/
Цитата
>Первая строка XML файла должна иметь следующий вид:
><?xml version ="1.0" encoding ="windows-1251"?>
Немного поколупал с утра го и с меня хватило на всю жизнь. Как можно иметь дело с этой примитивной парашей каждый день? Вы же все на антидепрессантах должны сидеть. Я ебал
Что конкретно не устроило?
Двачую, такое же ощущение было.
>Как можно иметь дело с этой примитивной парашей каждый день?
Это проходит, когда ты начинаешь работать с чужим кодом.
Или своим, но после полугодовой паузы.
И ты, о чудо, понимаешь, что он делает.
Возьмем тот же С++/Раст/Котлин, это если мы говорим о не "примитивных" языках.
Пишется то код легко и весело.
Только потом разобраться в жидкой кашице из шаблонов, расширений, перегруженных операторов и функций очень трудно.
P..S. Двач, как тебе моя коллекция хипстерской литературы?
>Нинужная макулатура
Бебебе.
Знаю я "программистов", которым кроме StackOverflow и ctrl+c / ctrl+v ничего не надо.
Только вот одна проблема:
- Garbage in, garbage out
Gowno in, gowno out.
Хорошо, что ты там в этой макулатуре такого вычитал, чего нет в документации по языкам?
Чистый/совершенный код - хуита, ну и
>хипстерская
>на русском
тыпонел. Но для начала неплохо, на полку поставить точно не стыдно, лол.
>Хорошо, что ты там в этой макулатуре такого вычитал, чего нет в документации по языкам?
Что вы понимаете под понятием "документация по языкам"?
Language Specification?
>на русском
Для меня это преимущество.
При написании
- Тех задания
- Паспорта проекта
- Справки разработчика/пользователя
- Комментариев
- Баг репортов.
знать официальный перевод терминов полезно.
Иначе получается смесь нижегородского с французским
// Эта кложура синкает линк из пула и ретурнит ерроры в слайсе
>Language Specification?
Хуенгвидж маняфикация, в нормальных языках есть доки с описанием и примерами
>Хуенгвидж маняфикация, в нормальных языках есть доки с описанием и примерами
Что есть "нормальные языки"? Это что то из разряда:
https://ru.wikipedia.org/wiki/Ни_один_истинный_шотландец
>Что есть "нормальные языки"?
>Перл, Си
Странный список.
Выбрали с помощью монетки?
Но раньше вы утверждали, что
>в нормальных языках есть доки с описанием и примерами
Для С есть официальный(!) сайт с "доками" и "примерами"?
Я знаю что официальная спецификация языка С
- платная. Около 200 долларов https://www.iso.org/standard/74528.html
- защищена копирайтом.
Что то не сходится.
>спецификация языка
Смысл знаешь?
>Выбрали с помощью монетки?
Нетъ, вот так должна выглядеть нормальная дока:
https://perldoc.perl.org
Няшка
>Воистину божественные языки, особенно Перл
> Перл
Возглавляет список самых ненавидимых языков программирования
http://lmgtfy.com/?q=most+hated+programming+language
Эта анонимная функция синхронизирует соединение из пула и возвращает возникшие при этом ошибки в массиве.
Тоесть менее ненавистные С++ на 10 месте и Матоаб на 15 тебя не смутило? А ТайпСкрипт на 3 месте по любимости? Ммм? Лол
А самый пиздатый это Р и Котлин, кек, рейтинг смузихлебов он такой
>Тоесть менее ненавистные С++ на 10 месте и Матоаб на 15 тебя не смутило?
>А самый пиздатый это Р и Котлин, кек, рейтинг смузихлебов он такой
Что меня должно было смутить? Это опрос на StackOverflow.
А как мы выяснили SO - это основное место? где месные нищие духом "программисты" побираются крохами кода.
По крайней мере, я надеюсь это StackOverflow, а не SQL.ru/forum
Интересно, ничего нового конечно, но тут же по-научному что ли как-то сформулировано. Надо бы начинать развиваться читать подобные книги или книги по около психологии.
Это копия, сохраненная 23 сентября 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.