Это копия, сохраненная 7 июля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики (в 1.18), наследование и эксепшены.
Растобляди жабобомжи завидуют и рвутся в треде, сектантская запарта не переваривает.
С чего начать:
- В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском)
- Читаем документацию прямо по порядку (пункт "Learning Go"): https://golang.org/doc/
- Емкий пошаговый гайд с азов до джуна (go tour на максималках): https://www.practical-go-lessons.com/
- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)
Литература:
- Донован, Керниган "Язык программирования Go"
- Также хорошие книги для начала: https://www.golang-book.com/
- Книги из списка https://github.com/dariubs/GoBooks
Полезные ресурсы:
- Сборник паттернов и инфы по микросервисам: https://microservices.io/
- Смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
Обновляемый список с пакетами: https://github.com/avelino/awesome-go
Ламповая конфа треда: t.me/golang2ch и даже активная
Предыдущий тред умирает здесь: >>1986204
Шаблон шапки: https://pastebin.com/vmWawK2t
>golang
> Я только сегодня понял, что почти никто толком-то и не понимает, зачем вообще Go нужен. Если коротко, то Go нужен для того, чтобы проектировать robust software. Я не знаю, как правильно перевести это слово на русский, но это скорее всего что-то вроде «надежный». Так вот, Go сделали, потому что гуглу нужен был инструмент для написания надежного кода. На самом деле не сколько гуглу, сколько Робу Пайку, который последние две декады, как минумум, одержим идеей сделать сишку с каналами и зелеными потоками. Так получилось, что Роб Пайк попал в нормальную компашку с другими штрихами из Bell Labs, крутейшим Russ Cox, Фицпатриком и т.д. Этим ребятам несложно было убедить гугл, что им нужен новый язык и вобщем-то, бабосики они на него выбили.
> Так, это было небольшое лирическое отступление, давайте вернемся к теме. Да, зачем же все-таки гуглу был нужен новый язык? Ну, тут все понятно, давайте послушаем слова самого Роба Пайка:
> Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут.
> А теперь давайте попытаемся понять, что же он имел ввиду. Если грубо говоря, то он сказал, что в гугле работают не самые умные ребята («не способные понимать крутой язык»), так что они придумали такой язык, который просто невозможно не понять. Это на самом деле очень круто для менеджмента. Посудите: можно нанять 100 посредственных программистов, дать им в руки Go и эта армия обезьян будет генерить вам много «неплохого» и очень даже поддерживаемого кода! Go это фантастический инструмент для менеджмента, лучше не придумать: моментально загоняем всех программистов в рамки go-fmt (никто не сможет пропихнуть свой стиль форматирования), забираем у них любые абстракции сложнее интерфейса и получается такой конвеер кода, в котором developer is just another brick in the wall. По-моему, очень круто! Ну, программистам скорее всего такой расклад не очень понравится — мало кто любит быть винтиком в системе.
>golang
> Я только сегодня понял, что почти никто толком-то и не понимает, зачем вообще Go нужен. Если коротко, то Go нужен для того, чтобы проектировать robust software. Я не знаю, как правильно перевести это слово на русский, но это скорее всего что-то вроде «надежный». Так вот, Go сделали, потому что гуглу нужен был инструмент для написания надежного кода. На самом деле не сколько гуглу, сколько Робу Пайку, который последние две декады, как минумум, одержим идеей сделать сишку с каналами и зелеными потоками. Так получилось, что Роб Пайк попал в нормальную компашку с другими штрихами из Bell Labs, крутейшим Russ Cox, Фицпатриком и т.д. Этим ребятам несложно было убедить гугл, что им нужен новый язык и вобщем-то, бабосики они на него выбили.
> Так, это было небольшое лирическое отступление, давайте вернемся к теме. Да, зачем же все-таки гуглу был нужен новый язык? Ну, тут все понятно, давайте послушаем слова самого Роба Пайка:
> Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут.
> А теперь давайте попытаемся понять, что же он имел ввиду. Если грубо говоря, то он сказал, что в гугле работают не самые умные ребята («не способные понимать крутой язык»), так что они придумали такой язык, который просто невозможно не понять. Это на самом деле очень круто для менеджмента. Посудите: можно нанять 100 посредственных программистов, дать им в руки Go и эта армия обезьян будет генерить вам много «неплохого» и очень даже поддерживаемого кода! Go это фантастический инструмент для менеджмента, лучше не придумать: моментально загоняем всех программистов в рамки go-fmt (никто не сможет пропихнуть свой стиль форматирования), забираем у них любые абстракции сложнее интерфейса и получается такой конвеер кода, в котором developer is just another brick in the wall. По-моему, очень круто! Ну, программистам скорее всего такой расклад не очень понравится — мало кто любит быть винтиком в системе.
В палату.
отправляйся к себе в шарпы/жабу/пидон или откуда ты там вылез, и не мешай нам тут
[code]
package main
import (
"bufio"
"fmt"
"math"
"os"
"strconv"
"strings"
//"errors"
)
func main() {
phrase := "Counting the circles..." //string
fmt.Println(phrase)
fmt.Println("Please select radius for a circle")
reader := bufio.NewReader(os.Stdin)
rad, _ := reader.ReadString('\n')
rad = strings.Replace(rad, "\n", "", -1)
numrad, e := strconv.ParseFloat(rad, 64)
if e != nil {
fmt.Println("Conversion error", rad)
}
circlearea(numrad)
}
func circlearea(p float64) {
area := (math.Pow(p, 2)) * math.Pi
var printable string = strconv.FormatFloat(area, 'f', 6, 64)
fmt.Println(printable)
[/code]
}
[code]
package main
import (
"bufio"
"fmt"
"math"
"os"
"strconv"
"strings"
//"errors"
)
func main() {
phrase := "Counting the circles..." //string
fmt.Println(phrase)
fmt.Println("Please select radius for a circle")
reader := bufio.NewReader(os.Stdin)
rad, _ := reader.ReadString('\n')
rad = strings.Replace(rad, "\n", "", -1)
numrad, e := strconv.ParseFloat(rad, 64)
if e != nil {
fmt.Println("Conversion error", rad)
}
circlearea(numrad)
}
func circlearea(p float64) {
area := (math.Pow(p, 2)) * math.Pi
var printable string = strconv.FormatFloat(area, 'f', 6, 64)
fmt.Println(printable)
[/code]
}
func syscall_Syscall6(fn, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
lockOSThread()
defer unlockOSThread()
c := &getg().m.syscall
c.fn = fn
c.n = nargs
c.args = uintptr(noescape(unsafe.Pointer(&a1)))
cgocall(asmstdcallAddr, unsafe.Pointer(c))
return c.r1, c.r2, c.err
Виснет вот тут в процессе обработки. Чё ему не нравится - понять не могу.
Переписал.
https://pastebin.com/gY1F0Xf3
Повисло абсолютно там же. Конкретно вот на этой строчке всё в пизду летит.
> cgocall(asmstdcallAddr, unsafe.Pointer(c))
В описании функции вот такая хуйня:
> Call from Go to C.
Нужен С в зависимостях, или как это должно работать?
Не пиздите тряпками, плез, я кода никакого джва года не писал, SQL не в счёт.
Пукнул в тред.
Не знаю, ведь я никогда не писал на джаве
Мне вполне зашла книга, которая Язык программирования Go. Все вполне себе кратко изложено для тех, кто уже знаком с программированием, ну т.е. не скучаешь. И практических заданий завались, особенно начиная с горутин и каналов, дают просраться не слабо. Собственно после этой книги я уже свободно писал на Go, посматривая в документацию.
Окей, глянул содержание - я так понял это книга больше по основам Go, чтобы выучить всякую многопоточку, ну и вообще не быть лохом в базовом синтаксисе. Ну а по бэкенду? Книги\туториалы по написанию тех же простеньких RESTApi, или CRUDа с какой-нибудь БД где можно откопать, пока нашел на гитхабе какие-то полу-гайды
Вот полных гайдов нормальных не думаю что найдешь. Просто придумываешь идею для сервиса и идешь гуглить фреймворки/либы под это дело, если чего-то не находишь - пишешь сам.
Например нужен тебе микросервис с REST API и коннектом к базе.
Ищешь HTTP фреймворк, тот же Gin, например, супер простой. Ищешь коннектор к PostgreSQL/MySQL/etc. Если какое-то взаимодействие между сервисами, то можно GRPC впилить. И так далее. Изучаешь их по отдельности и пишешь код.
Понял, благодарю
Так оно же ждет \n в stdin. Попробуй go build -o /tmp/bin . && echo 42 | /tmp/bin
Хуже чем с другими языками, но тоже реально. Позаходи на сайты крупных фирм, на "галеры", так называемые.
Идти нахуй, очевидно же
Макгаврен Д Изучаем Go
Есть вариант дослужиться до мидла/синьера на другом языке, а затем свичнуться, большая часть гоферов по такому пути пришли. Но это всё фигня, вкатунов в го всё равно меньше чем вакансий ждунов, смело иди на собесы
А хорошо выглядит
интересно, они стрелочки специально сделали, что бы сделать вид, что это не питон
>вкатунов в го всё равно меньше чем вакансий ждунов
Опять охуительные истории про дефицит кадров
Суть паттерна репозиторий в том, чтобы абстрагировать слой данных от остального приложения. Т.е. хорошо написанный репозиторий должен быть легко заменяем другой имплементацией без изменения кода приложения. Так что да, я всегда создаю отдельный пакет репозиторий, который содержит интерфейсы репозиториев всяких сущностей + определения ошибок или просто их значения, т.к. в большинстве случаев хватает именно синглтона ошибки стандартного типа
Ну я тоже верил в шизотеории про то, что вкатуны с говнокурсов если не сегодня то завтра точно отберут у меня работу, но потом меня повысили, я стал проводить больше собеседований и я понял на сколько это далеко от правды. У меня теперь другая шизотеория, что курсы на самом деле отупляют людей, которые до этого были способны сами прочитать книжку, настроить себе окружение и написать калькулятор. Но из-за того что привыкли что их водят за ручку на этих самых курсах они окончательно потеряли способность самостоятельно находить информацию
>Но из-за того что привыкли что их водят за ручку на этих самых курсах они окончательно потеряли способность самостоятельно находить информацию
Они сами хотят, что бы их за ручку вели
Я пришел вкатываться с нуля - катите меня!
>про то, что вкатуны с говнокурсов
Какие ещё вкатуны? Полно свежих профильных студентов, вкатывающихся на хайповое goвно
>Профильный студент
Не имеет никаких навыков по написанию поддерживаемого кода и больших проектов, а в случае с говной и жизненно необходимым навыком правильного написания распределенных систем
Я когда только выпустился мне на первой работе так жепь разорвало от того, что после вуза пришлось люто доучиваться на самой работе
>навыков по написанию поддерживаемого кода и больших проектов,
>а в случае с говной и жизненно необходимым навыком правильного написания распределенных систем
И нахуй тогда вообще нужны джуны/вкатуны
Так они и нужны в очень небольшом количестве, что бы расширять постепенно штат сотрудников что очень часто не работает потому что они сваливают как начинают ощущать себя мидлами
И нахуй тогда пиздеть, что вкатунов меньше чем вакансий джунов
Трус не играет в хоккей!
джнуов не берут никуда, даже в дворники, даже в охранники
Нахуй вообще программирование нужно?
Так сложно полгода гриндить литкод и закатиться в топ маркетплейс? Ах да, у пориджей же алгосы не нужны
Ты охуееш когда узнаешь на сколько там всё плохо, если это не топ-5 вузов страны. А если топ-5, то их еще за 2 года до выпуска забирают к себе крупные конторы и обучают под свои нужды
Понятно.
эффект низкой БАЗЫ
https://xakep.ru/2021/02/26/go-malware/
А что не так? Любая программа на говне уже по умолчанию вредоносная.
Так только у вас воняет.
>Ты охуееш когда узнаешь на сколько там всё плохо
Это значит, что кабанчики совсем зажрались
>А если топ-5
Куда вам топ-5, вы и сами не фуфанг
На чем угодно. В малвари хайтек только в всяких руткитах, а клиентский софт на любой хуйне пишется, c&c тоже может макака на пхп написать.
>>172737
>На чем угодно.
Не на чём угодно, в идеале, нужно скомпилировать бинарь, если знаешь точную конфигурацию машины жертвы. А там уже остаётся только через бэкдор скачать бинарь на машину и запустить. Скачивать интерпретаторы или ВМ не вариант, так как это легко можно спалить антивирусом.
99% массовой малвари под шинду, к линупсам в любом случае нужен индивдуальный подход, там работают точечно.
На что и намекае статья с списками APT, эти не сшибают мелочь с миллионов, а работают по крупняку.
Видели уже? Что думаете? Как по мне - хуита, можно было безболезненно сделать поведение с тильдой по умолчанию и не засорять код ненужными символами
Мне, например очень понравилась errgroup ну это не паттерн, но как бы ты понял что я имею в виду - удачный и изящный конструкт. Типа нужно запустить горутины, которые могут поймать ошибку. И красота в том, что нет ни строчки лишнего кода. eg.Go() и пиздец. А под капотом целая машинерия на каналах.
Но что если нужно например ограничить количество параллельных горутин?
Я вижу два варианта:
- Делать какую-то конструкцию с каналами (видимо буферизованными или с семафором). Получится громоздко.
- Использовать ту же ерргруппу, но добавить семафор не понимаю, почему его не сделали опциональным параметром ерргруппы. Не так громоздко, но все равно лишний код.
Мне кажется должны быть уже известные рецепты/инструменты для таких типичных кейсов.
Ну можно через пулл воркеров ебануть. Запускаешь сколько надо воркеров, например 4, на каждое ядро, и через канал отдаешь им таски, через другой канал смотришь ошибки (можно обернуть в тот же Wait). Но это довольно громоздко.
Да, это все очень громоздко.
Вообще я немного ступил в своем вопросе, ограничить горутины семафором легко (пикрелейтед) - это достаточно лакончино получается.
Я хотел сказать другое.
Есть пул задач, которые мы хотим разбирать в N воркеров.
И есть их результаты работы, которые мы хотим разбирать в M воркеров.
(Ну например: ходим во внешний сервис 10-ю воркерами, пишем в базу 2-мя. Условно.)
Суть очень простая. Но на чистых каналах это будет ебаная простыня.
Мне хочется какой-то конструкт, чтобы что-то типа:
err := pipe.
-- Funout(10, func() {}).
-- Funnel(5, func() {}).
-- Wait()
С дашчана капчуешь? Попробуй теперь в браузере открыть, увидишь тег [сodе][/сodе].
Если бы хач полностью выключил разметку в /pr/, это бы принесло больше пользы, чем вреда. То индекс по i проебётся, то указатели, а используют подчёркивания-курсив в тексте в основном одни шизики.
>Мне хочется какой-то конструкт, чтобы что-то типа:
>err := pipe.
>-- Funout(10, func() {}).
>-- Funnel(5, func() {}).
>-- Wait()
Ну без дженериков такое использовать очень неудобно, но можешь обмазаться https://github.com/ReactiveX/RxGo
Я в го совсем недавно, хочу устроиться кодером на бэк, хоть куда-нибудь, всё зделал за пару дней. Вместо gin лучше самому движок написать? Они попросили не использовать ничего кроме го и монгодб.
Просто хз как надо.
А ещё вопрос. В "hash" есть интерфейс hash.Hash. Функция из "crypto/hmac" hmac.New(...) возвращает тип hash.Hash структура вроде как или хз. Хотел написать что-то вроде этого:
func (h hash.Hash) addSomeShit(data []byte) hash.Hash {}
Но он не даёт это сделать, только так
type Hash struct {
Hash hash.Hash
}
func (h Hash) addSomeShit(data []byte) Hash {}
С обращением через h.Hash. По другому не работает. Пробовал type Hash hash.Hash, type Hash struct {hash.Hash}, Но в тех и других случаях получается не то что хотелось бы.
Интерфейс можно указывать как выход, но для него нельзя добавить новый метод получается?
Вот ещё, в самой либе hmac. Он возвращает hash.Hash, но делает return Hmac. Можно просто на вывод указать интерфейс, а там любой тип, лишь бы реализовывал его? В чём плюсы так делать? Чтоб рефакторинг не проводить потом?
>Вместо gin лучше самому движок написать?
На самом деле стандартный net/http не так и плох, для твоей задачи более чем хватит
> Интерфейс можно указывать как выход, но для него нельзя добавить новый метод получается?
Да, ты можешь заембедить в свою структуру либо другую структуру, либо интерфейс, но добавлять метод к типу из другого пакета ты не можешь.
>>180218
Вообще рекомендуют в общем случае принимать в аргументы интерфейсы, а возвращать конкретные типы, а кому надо - они уже дальше в интересы явно или неявно преобразуют.
> I propose that we do not update the libraries in 1.18.
https://github.com/golang/go/issues/48918
Ну да, на много лучше как в старых добрых сях - вместо методов создавать функции для работы со структурой.
Постгрес, докер и остальное.
Если разраб: https://github.com/Alikhll/golang-developer-roadmap/blob/master/golang-developer-roadmap.png
Если девопс - тебе в общем-то кубернетиса более чем хватит чтобы охуеть от количества материала, а когда будешь в кубере понимать - там уже по вакансиям смотри что на рынке требуют.
>на интерпретируемых динамикодриснявых и т.д. языках
Ты жалок и слабодушен. Ради ответа на вопрос поносишь себя говном и свои альма-матер.
Мать тоже продашь за сгуху при соответствующих обстоятельствах?
>как понять ебучие указатели
Что там понимать? Указатель это ссылка на область памяти.
Передаешь в функцию указатель - прыгаешь к данным по ссылке и работаешь с ними.
Передаешь в функцию не указатель (значит само значение) - получаешь копию области памяти и работаешь с копией.
Отсюда два сайдэффекта:
- Указатель занимает 64 бита незвисимо от того на что указывает.
- Работа с указателем повлияет непосредственно на оригинальные данные, а не на копию.
Дриснявое говно это го.
Ну, если ты из интерпретируемых динамикодриснявых языков, то просто используй поинтеры к любой структуре, которую ты сам определил, семантика будет такая же как ты и привык в своём ${языкНейм}
Единственное исключение - старайся не передавать поинтеры в каналы, либо если передавать - то больше не использовать его в той горутине откуда ты его отправил.
Не ради ответа на вопрос, а просто констатирую факты, которые обнаружил через работу с этими языками, потому и решил переходить на го или дотнет или джаву, вот го первым подвернулся. И не себя поливаю, а инструменты, на которых работал. Альма-матер? Ты слишком серьезно относишься к лопатам и киркам.
Про область памяти понятно, не понятно когда их использовать, а когда нет.
Из твоего ответа не понятно, зачем вообще нужны указатели, если можно каждый раз не использовать их и просто передавать копию? Байты экономить?
Если ты считаешь го дрисней, то какие языки не считаешь?
>>185893
В текущем проекте поинтеры как будто бы произвольно используются, и сущности из стандартной библиотеки тоже то с ними передаются, то без них.
>>185894
Во втором случае больше не использовать в горутине даже если из канала он просто читается и ничего больше с ним не делается? Данные по ссылке ведь те же самые должны остаться
>не понятно когда их использовать, а когда нет
Используй указатели для больших структур или если объект должен быть мутабелен. В остальных случаях передавай копированием, всё. Про согласованность методов структуры читай ниже.
https://golang.org/doc/faq#methods_on_values_or_pointers
Literally me
>если можно каждый раз не использовать их и просто передавать копию? Байты экономить?
Представь себе, да. Когда про говноязыки говорят, что они текут, имеют в виду именно рост потребления памяти по времени работы процесса. Если хочешь в документации к своему говну написать "нужен перезапуск процесса по крону раз в час", то да, можно не использовать указатели и просто передавать копию.
Есть какие-то данные о том, насколько сильно это экономит память? Это точно не экономия на списках?
Если ты программист, то можешь написать два куска кода и погонять их в бенчмарках. Если нет, то хули тебе надо бля?
Нужны пруфы утверждению о том, что указатели значительно уменьшают потребление памяти. Утечки памяти ещё приплел не к месту зачем-то.
Утечки памяти по-другому работают, пчел. И как раз в говноязычках всё на указателях работает
У тебя есть массив, который весит 1мб
Каждый раз передавая массив в функцию, тебе придется выделять память под новый массив, а gc убирает старый. Программа потребляет в разы больше памяти и сколько-то процессорного времени.
>Программа потребляет в разы больше памяти и сколько-то процессорного времени.
Ты уверен, что потребляет в разы больше памяти? Тем более gc это быстро чистит, и процессорного времени он занимает не много, он го охуеть какой эффективный, особенно по latency.
Зависит от размера структуры и нагрузки. GC умный, но магии здесь нет.
В хайлоаде начинают каждую аллокацию считать
В любом случае, вы сейчас занимаетесь теориекрафтите преждевременные оптимизацию не столкнувшись с реальной проблемой в производительности, а такие вещи лучше решать по месту.
что либо предполагать тут бессмысленно, надо запускать escape analysis.
Есть несколько нюансов по котороым память выделится в хипе:
1) При неопределенной длине слайса/мапы
2) При возврате указателя с функции/метода (ИМЕННО return)
3) При создании глобальной переменной в пакете
4) closure (лямбды)
1) Массивы(не слайсы) с определенной длиной передаются by value(слайсы по идее тоже, но там только хэдер, а данные по указателю)
2) При передаче указателя в аргумент функции, данные не будут выделяться в хипе
3) Гошный stack очень сильно отличается от стэка других ЯП, если кратко сказать то он эластичен и может изменяться, но задетектить это кажется нереально (надо глянуть сурсы). Поэтому большие массивы у которых длина константна могут уложиться в стэк (если данные массива занимают больше 65536 байт то он уйдет в хип, при меньшей в стэк)
фикс: у слайсов если длина константна*
Why Network Engineers Should Learn Go
https://darrenparkinson.uk/posts/2021-10-13-why-network-engineers-should-learn-go/
Это ещё вопрос, является ли сам го альтернативой жабе и дотнету.
Сейчас все пишут на тайпскрипе на ноде и деплуят это все в кубернетисы на облако
Ну а хули, го только и обслуживает кубернетисы и больше нигде не нужен, вон в helm там шаблоны на готемплейтах
Пацаны ну есть же нормальные языки типа джавыскрипта или питона, нахуй это говно нужно?
От го меньше тошнит, проще вкатиться на сеньора, меньше вероятность что придется ковырять кровавое легаси
ООП языки дискредитировали себя, так что выбор у тебя между нодой и го, если хочешь работать в топовой компании.
очень смешно
Никак.
Есть обертки над сишными либами разной степени паршивости, есть https://github.com/fyne-io/fyne для простых приложений без требований к дизайну.
А вообще вот список, я не знаю что ты хочешь сделать и какие требования к либе https://awesome-go.com/#gui + https://awesome-go.com/#game-development
ОС будет либо консолью для админов, где можно ставить только серверный софт, либо браузером, где свои приложения ставить запрещено, постоянный доступ в интернет обязателен.
да, нет, если опыт прям ноль то рекомендую, если опыт был хотябы 2+ года на любом языке в вебе то сразу бздуй на мидла, не шучу
Такой-то дивный новый мир.
>консолью для админов, где можно ставить только серверный софт
Такой-то манямир неосилятора линукс. Для текстовых консолей есть и музыка, и игры, и отображатели картинок даже. ASCII-видео разумеется не завезли, но оно и не нужно.
Но зачем
Эх, сейчас бы быть разРАБотчиком и не мочь в линупс.
Охуеть, а я запускал иксы, чтобы подрочить. Спасибо, анон!
Если пщ для тебя сложный, то что тогда простое? Только не говори, что жс/питон, они намного сложнее.
Ладно, принято. Ну хз, главное изучать дальше и не сдаваться, понимание появится.
php 5.4 минимум
В го нет джунов, можешь не переживать.
Микросервисная залупа обернутая в кубернетис, вот тебе и вся архитектура.
Не норм. Но скажи спасибо гуглу, что выбора тупым программистмшкам он не дал.
Пакеты с npmjs.com не могут исчезнуть?
Пакеты с pypi.org не могут исчезнуть?
в го модулях тоже можно переопределить откуда пакет тянуть (replace) https://golang.org/doc/modules/gomod-ref
Ну и про вендоринг не забывайте
Конечно. Уже вторую неделю изучаю его после работки.
Приходит <nil>
func MakeRequest() {
//var query string
var v []interface{}
resp, err := http.Get("тут урл")
if err != nil {
log.Fatalln(err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalln(err)
}
//query = string(body)
test := json.Unmarshal(body, &v)
log.Println(test)
}
Щит, с разметкой накосячил... Простите.
В данном случае лучше использовать json.NewDecoder(resp.Body).Decode(&v)
https://play.golang.org/p/Gv7UN3vS_fA
для двоча подошло, конечно, но для моей задачки нет. массивы данных у меня в текстовом виде представлены и только когда я выбираю в консоли браузера вкладку с get параметром, то в ответе вижу json. Пытался в самом браузере в поисковой строке дописать .json в конце строки, так он мне просто null вернул(браузер, не Go)
>test := json.Unmarshal(body, &v)
>log.Println(test)
>Приходит <nil>
Ты же в курсе, что ты логируешь ошибку? Этот метод "анмаршалит" данные в структуру V и возвращает ошибку. Нормальный код выше уже написали, он должен работать. Проверь правильность работы АПИ, или чего нибудь ещё, ошибка может быть очень глупой.
О, блен, анон, реально чето затупил. Сейчас все получилось. Огромное спасибо!
Просто убрал присвоение и стал выводить v. Ошибка реально глупая.
Анон, расскажи о себе. Что такого произошло в твоей жизни, что ты решил тратить своё свободное время на засерание го треда? Где ты свернул не туда?
А в пщ это делается автоматически, никакого async-await-мусора не нужно.
Тут почти как в OS - планировщик всю эту херню крутит-вертит и мапит m горутин на n тредов, а когда они доходят до всяких time.Sleep, сисколов, мьютексов и каналов - передает управление другой горутине. Но ты можешь руками вызвать runtime.Gosched(), если тебе очень надо.
Лул, я на позицию го-дева прошел в банк только закончив тур и написал говноборду. На собесе только про прошлый опыт с питоном спрашивали и пару задач с которыми даже даун справился бы. и отвалился на СБ так как не хотел ИП закрывать, который я для апворка использую
Для синхронизации нужны каналы, waitgroup. Читай доку, читай го бложик
Товарищи Аноны, имеет ли смысл брать GO первым языком программирования? Если нет посоветуйте какой-нибудь другой(Сижу под линей, С# не предлагать)
Изучаю голанг как второй ЯП уже после двух лет работы на пхп. Мне очень трудно дается.
Не имеет, го для миддлов, перекатывающихся из других языков.
Язык выбирай по области, которой хочешь заниматься, хоть жаба, хоть жс, хоть кресты.
А чего не дается-то? Основная разница в sync пакете валяется и в каналах, ну и в байтоебле с профилированием и высчитыванием шо стек шо хип как любят плюсовички, а просто говнокодить контроллеры и репозитории все одинаково
Контекст, горутины, каналы, кривой синтаксис, постоянные err != nil, ругань о том, что что-то объявлено и не используется, громоздкие отправки GET и POST запросов, странные интерфейсы. В общем у меня ошибка на ошибке. Решу одну, всплывает другая. Ну и конечно же подкрепляется это тем, что из-за необычности синтаксиса понимание написанного дается в несколько раз сложнее.
Странный ты, у меня после пистона натура заходит.
Тогда хз, у меня твой код работает, внимательно изучи API сервера, мб проебался с типами.
Вот есть цикл который с 10 итерациями.
Каждый раз в цикле запускаются анонимные горутины, которые записывают в канал(int) число возвращаемое из функции(которая выполняет какие-то действия и возвращает int)
Далее после всего цикла перед return я читаю все 10 значений из канала, НО получаю половину значение с числом 1. Вопрос, как получить все 10 значений из функций в горутинах?
>имеет смысл GO
да
>под линей
это типа линукс? я так понимаю ты собрался сервера писать, есть же .netcore нормально пишут на нем сервера.
> Если нет посоветуйте какой-нибудь другой
похуй какой, везде придется учить клиент-серверная архитектура, основы сетевой работы, rest, docker, kuber, БД, bash, и прочие команды терминала. Именно язык тут 10-30%. Думаю лучше начать с python у него тонны документации на ру. Если ты читаешь на инглише и смотришь видосики то можно и ГО.
На работу можешь подаваться когда осилишь условно 10 серверов, зальешь на гит с нормальными коментами.
>что что-то объявлено и не используется
Так вот кто этот говнокод на пыхе пишет, ты может быть ещё и битриксоид?
Пиздец я обоссался с пикчи
Ну да, я пишу. Только не битриксоид а PHP Native.
> Все так же зависимость ставится глобально, да еще и что-то там настраивать в путях надо?
Если ты намекаешь на node_modules, подобного говна нет и никогда не будет ни в одном нормальном языке. Несколько версий одного пакета можно держать менее костыльными способами.
Всё в доке написано и уже давно работает, ничего самостоятельно делать не нужно.
Конечно написано, только это документация для питона
go get -u github.com/gorrila/mux
rm -f $(go env GOPATH)/pkg/mod/gorrila
Пиздец комманда для удаления.
Привет задроты. Я тут мимо-фулстак-жс-макака, решил расширить кругозор и углубился в этот ваш го. Осилил интро до момента "у нас нет классов, а метод это функция с указанием типа-ресивера"
Сказать что я охуел это ничего не сказать. Поэтому у меня к вам сходу несколько вопросов.
Как тут у вас с ооп? Наследования нет, как я понял, как же вы тут живёте? Утиная типизация?
Почему нет Классов? Нет классов значит нет конструкторов значит нет реализации базового функционала? Или вы там фабриками на каждый чих обмазываетесь?
Нахуя указатели? Тут я вообще не траллю. Там же у вас сначала надо чо-то объявить, затем взять указатель от чегото затем делать по указателю присваивания. Смысл этой свистпляски для меня неясен.
Вопрос последний, который должен быть первым. А нахуя вообще нужен этот голанг? В мире дотнета, ноды и прочего такого?
> Как тут у вас с ооп? Наследования нет, как я понял, как же вы тут живёте?
Вместо наследования есть interface embedding/struct embedding. Полиморфизма нет.
> Почему нет Классов?
Дядюшка Пайк считает, что они не нужны.
> Нет классов значит нет конструкторов значит нет реализации базового функционала? Или вы там фабриками на каждый чих обмазываетесь?
А что плохого в фабричных функциях? Те же конструкторы, но с названием.
> Нахуя указатели?
А нахуя ссылки в JS?
> А нахуя вообще нужен этот голанг? В мире дотнета, ноды и прочего такого?
А нахуя дотнет, нода и прочее такое, если есть голанг?
У го киллерфича это то что нет async/await и тредового говна, и не надо синк/асинк версии функций писать, своя модель конкаренси
Ну для начала сразу скажу что я не даю оценок. Я прикидываю закатываться или нет. А для этого мне надо понять как делаются типовые задачи. >>204823
>Вместо наследования есть interface embedding/struct embedding
Можно вкрации на пальцах? Сам я все свои 22 года программирования пишу в ООП парадигме, и очень редко функционально..
>А нахуя ссылки в JS?
Ну быстрое сравнение? Безопасность опять жи
>А нахуя дотнет, нода
Не ну это слишком тучно. Дотнет это охуенная инфраструктура, сишарп, ебилион пакетов на все случаи жизни, жёсткая типизации, крутейшие иде, кросплатформеность и многопоточность, дженерики, рефлешкн
Нода это жс, это нестрогая типизация, опять же ебилион пакетов, ультра быстрая разработка, и опять же крутая инфраструктура
Т. З. Персонального опыта Го смотрится как йет эназер хайпнейм лангуаге. Но я предполагаю что должны ж быть места где он хорош, раз его используют в тырпрайзе?
>>204842
Вот это уже звучит как интересное. Я вот сам думал что асинк авейт ващет могли б сделать поведением по умолчанию...
Окей, я понял что их нет. А в чем киллер фича? Как там прогают асинхронно тогда?
На неё еще никто не откликнулся. Для кого-то это в ебенях, но знайте же одно: надо отработать год в ебенях, а потом вы можете работать удаленно. Просто накопите на месяц жизни и езжайте, а потом живите на зп. Удачи вкатышам. А я возвращаюсь в свой любимый фронтент.
>>196656
А зачем бросать фронт? Чем тебе не нравится? Полно работы и денег, много интересных проектов, что не нравится-то я не пойму?
>Можно вкрации на пальцах?
Ну например:
type Stringer interface{ String() }
func Print(s Stringer) - функция которая принимает только объекты которые реализуют метод String(). Правильно реализовать метод String в своем объекте - твоя задача.
Так если класса нет, и наследования нет, как гарантировать что макакен реализует String() правильно?
>как гарантировать что макакен реализует String() правильно?
Не ебёт. Например ты реализовал интерфейс для БД (обычный круд), и с помощью него написал view и controller, пускай теперь другая макака на основе этого интерфейса запилит бд и чтобы она норм работала.
В прочем похуй, я тут копнул ещё.
Дженериков нет, трайкетча нет, дефолтных параметров нет, перегрузки методов нет.
Залупа/10, а не язык.
Пойду дальше на тайпскрипте кодить.
>Дженериков нет
НЕНУЖОН, но в 1.19 методичку поменяют. обмажемся по полной.
>трайкетча нет
НЕНУЖОН
>дефолтных параметров нет
НЕНУЖОН
>перегрузки методов нет
НЕНУЖОН
>Залупа/10, а не язык.
Ну где то так, мне норм.
>трайкетча нет
>НЕНУЖОН
Если с остальными еще с горем пополам могу согласить, но вот тут ты обосрался, мартышка.
>трайкетча нет
Это и ошибка по значению очень сильно влияет на процесс написания кода и архитектуры. Я после года на гоше, кроме как на расте больше не могу ни на чём писать без постоянного затупа.
Пчел, мне прям не хочется быть грубым. Но судя по спецификации это реально язык для тупых код макак которым нельзя вообще ничего.
Ну типа автор языка вместо
DoShit(a, b?, c?, d?) реально считает что копипаста
DoShitWithA
DoShitWithAandB
....
SoShitWithD
это что-то хорошее.
В го комьюнити есть общепринятый способ как работать с опциональными параметрами.
https://petomalina.medium.com/dealing-with-optional-parameters-in-go-9780f9bfbd1d
надо ли знать ЖС для вката в Го?
Это же по сути бэкенд язык, значит надо понимать хоть чуть-чуть что там просходит настороне фронта? Или похуй?
>программистам скорее всего такой расклад не очень понравится — мало кто любит быть винтиком в системе.
Лел, можно подумать что программисты это и так не легкозаменяемые винтики в системе, отличающиеся от заводчан только условиями работы и зарплатами.
Блять, честно тебе скажу, мб я макака, но за все время пока писал на го, единственным юзкейсом использования дефолтных параметров, были алгоритмы с рекурсией. А для чего они ещё нужны?
Если прям вообще пичёт, то альтернатив много:
1. Кастомный конфиг (Если объект очень большой, сервер или репа)
2. Обычный map (Самый простой, но самый уебанский способ)
3. Как уже написали, опционные функции (Хорошее решение для использования в функциях инициализаторах).
Это кстати, те знаменитые велосипеды на Го
> А для чего они ещё нужны?
Для функций/методов, которые делают всё на свете и сразу. Вот в го есть fmt.Printf, который печатает в stdout, и есть fmt.Fprintf, который печатает в указанный райтер, а в том же питоне, например, https://docs.python.org/3/library/functions.html#print принимает 4 аргумента с дефолтным значением, один из них это файл-лайк объект, по дефолту sys.stdout. Вообще для питона это нормально, некоторые функции там принимают по 3 строки аргументов, и если бы не дефолты - люди бы охуевали это всё передавать.
В го стараются не делать большие объекты, зачастую всё подобное говно делают многослойным.
Ну и еще есть принцип make zero value useful, но вне стандартной либы его практически никто не придерживается
Тут есть чёткая грань между твоим примером об fmt и "принимают по 3 строки аргументов". Большие объекты можно через конфиг создавать, NewRepo(&cfg{...}) и это будет удобно, а функции которые делают все подряд - говнокод.
> Как тут у вас с ооп
Нахуй ООП
> Наследования нет
Не нужно
> Утиная типизация
Для интерфейсов
> нет Классов
Нахуй классы
> нет конструкторов
Используют функции, возвращающие структуру
> Нахуя указатели
Всё более явно. В принципе, их могло и не быть
>. А для чего они ещё нужны?
CreateUser(firstName, secondName, lastName, prefix, postfix, gender, birthDate)
CreateUser(models.User{firstName:"GO",secondName:"VNO"})
Возвращать может созданого юзера, можно ещё делать валидацию внутри функции, чтобы присвоить свои default поля, но придется городить if'ы не самый хуйовый кастыль который я видел в го, так что бздеть по этому поводу не стоит.
Ладно дженерики, там пайк кое как объяснился, а чем ему необязательные и дефолтные параметры не угодили?
"They are a bad idea as they make it much easier to build confusing functions that complicate the API."
Хуйню написал если честно, что мешает создавать запутанные API через указатели на структуры вместо дефолтных параметров?
Перекатываюсь в го из пистона и понемногу ахуеваю.
Как вы живете с такими уебищными обработками ошибок, посоны? Это же пизда.
А еще я не понимаю где и зачем использовать указатели, потому что я тупой.
А еще я не понимаю почему чтобы сделать мапу, нужно обязательно оборачивать ее в make.
Пиздец какой то
>А еще я не понимаю почему чтобы сделать мапу, нужно обязательно оборачивать ее в make.
>Map: An empty map is allocated with enough space to hold the specified number of elements. The size may be omitted, in which case a small starting size is allocated.
>m := map[int]int{}
Братан, точно не мне давать тебе советы, но просто в доки смотри.
> А еще я не понимаю почему чтобы сделать мапу, нужно обязательно оборачивать ее в make.
Не обязательно, ты можешь создать мапу из значений https://play.golang.org/p/CAH_912zpdJ
Указатель для передачи в функцию большого числа данных.
Вот есть у тебя, например, очень жирная структура. Можешь передать её в функцию без указателя. Тогда функция будет работать с её копией, а копировать большую структуру долго, поэтому лучше передать её адрес в памяти (чем указатель и является), что будет куда быстрее.
Отсюда же вытекает, что если передаёшь что-то по указателю, то функция это что-то может изменить в ходе своей работы (напоминаю, что в противном случае она изменит копию, а не сам предмет).
Спасибо, более менее понятно.
В ступор ввел трехстрочный http сервер, где функция принимает ссылку на request и я вообще запутался
Бля, это ваше странное ООП еще с толку сбивает. По ощущениям поинтеры максимально похожи на self/this в пистоне
receiver, ты хотел сказать? Да, это буквально тоже самое, что и self/this.
Почему кстати не рекомендуют смешивать в рамках одной структуры передачу по ссылке и значению? От ситуации же должно зависеть
мимо
Думаю это связано с тем, что T и *T вангую макаба съест астериск, там поинтер на Т это разные типы и вполне могут имплементить разные интерфесы, вернее поинтер может имплеменить интерфейс, который значение по поинтеру не имплементит. Соответственно и в ряде случаев просто не имеет смысла использовать значение типов, которые должны быть использованы только через поинтеры. Яркий пример это структуры которые содержат мьютекс или вейтгруппу - их нельзя копировать, т.к. нельзя копировать нижележащие атомики, по тому что это просто не имеет смысла.
Возможно еще по тому, что если ресивер передается в часть методов как поинтер, то он скорее всего и так утечет в хип, а копирование поинтера на каждый вызов всё равно дешевле чем копирование какого-то другого, более сложного, типа.
Возможно просто хотели снизить когнитивную нагрузку, т.к. вложенность методов может быть довольно большая, и в ряде случаев сложно с первого взгляда определить, меняет ли метод внутреннее состояние или нет. А если меняет и где-то в цепочке вызовов был ресивер по значению - всё сломается, т.к. работа будет уже с копией.
Что-то я потыкался - прикольно, но пока оно прокатит только для крайне ограниченного числа кейсов. Больше всего не хватает дженериков на методах.
Их так и оставят, а потом задепрекейтят.
Вот такие как этот
>>209433
Ладно я, я начинал с си, где нет этих исключений, и у меня вообще нет вопросов.
Еще трогал хаскели и расты.
Почему все писаются от Option в них, а в го та же пара возвращаемых значений - плохо?
Ну в оптион языках, компилятор по голове не погладит за то, что забыл обработать ошибку/нулл, а в го можно хуй забить или забыть и получить ошибку в рантайме. Так думаю.
не знаком ни с одним из этих языков если что
"Все", кто жалуется на обработку ошибок в Go, и "все", кто писается от Option - это две разные непересекающиеся группы людей. На растах-хаскеллях ничего реального не пишут, и интересны они только борщехлёбам, которые и от отсутствия изменяемых переменных в восторге. От сишки-обёртки над ассемблером многого не ждут. А го продвигают чуть ли не как убийцу промышленных языков, при этом не давая их возможностей.
Я скорее всего завалю ибо тот курс был первый раз когда я вообще написал на языке что-то вменяемое, но почему бы не попробовать?
Главная причина почему не сделали дженерики в методах - это по тому что это усложнит ту часть компилятора и рантайма, который чекает имплементит ли данный тип данный интерфейс. Я не думаю что это что-то принципиально невыполнимое, но пока не ясно нужно ли это вообще кому-либо.
С interface{} на типобезопасность им было похуй, а в дженериках она вдруг понадобилась?
Ну, всегда есть места, где нужно принять любой тип, и не важно, что это interface{}, any или Object.
Всегда есть места, где нужно принять за щеку - например в комьюнити Go
А в пиндосии также? Или это говно только у нас популярно, потому что быстро и недорого?
При чем тут пустой интерфейс? Я про имплиментацию up-casting/down-casting в компиляторе/рантайме говорю.
гошка на первом месте по средней зп в мире
в снг только на третьем месте - скалисты и мобильщики больше получают
хз, почему оно так взелетело.
да, язык очень приятный и быстрый, но раст-то круче
>но раст-то круче
сука ты по всей борде меня преследуешь что ли блять...
в /b/ с тобой недавно общались
вот похожие мысли
как лид разработки, мне больше нравится го - язык простой и чистый, очень легко разбираться в чужом коде, особой дичи не понапишешь, он не прячет сложность каких-то операций за стандартной библиотекой. При этом очень производительный и нетребовательный к ресурсам.
но вот как программист, хотелось бы чего-то более лаконичного, с возможностью каких-то изящных конструкций (раст, скала) и еще большей производительностью
Поддержка у Go лучше, заходишь в любой сервис (heroku как пример), там сразу список из php/java/node/go, rust'a либо вообще нет, либо поддерживатеся на пол-шишечки.
Go Go Power Rangers ? ? ?
Шварценегера смотри. Но его можно спиздить, а деньги пропить.
https://pro.academind.com/p/golang-the-practical-guide
По самому языку будут спрашивать типовые задачки про слайсы/мапы/стринги/указатели и многопоточность: горутины, каналы и пакет sync. Если не дурак, то за пару дней нагуглишь на том же хабре и вызубришь, мне искать лень, сорян. Дальше обычно не лезут, все остальное скорее всего будет ебкой по сопутствующему стеку: SQL-запрос попросят написать-оптимизировать и что-нибудь про деплой и микросервисы спросят. Но я перекатывался с другого стека сразу на миддла, ко мне отношение изначально менее предвзятое было.
В целом согласен, но в данном случае конторе сильно надо и она готова платить за это, то почему бы и нет?
Другой анон
https://www.youtube.com/watch?v=VzBGi_n65iU
В Си можно написать макрос, чтобы не писать один и тот же код для обработки ошибок множество раз, а в Го нет. Поэтому и бугурт
Ну и чем го лучше питона?
тем что питон легаси на микросервисах и с него все уходят, работу через пару лет пиздонистом будет сложно найти
Её и пару лет назад было сложно найти. Слишком поздно для бэка, слишком рано для нейроговга.
можно вкатиться к вам, если у меня мак? не могу в линукс совсем
заебало, что полторы вакансии для ios
думаешь, так просто всё? щас главный треда подойдёт, посмотрит кто ты, откуда, чем живёшь-дышишь...
Ничем не лучше и не хуже. Хотя оба языка по заявлению разработчиков универсальные и мультипарадигменные, каждый из них хорош только в своих узких задачах, где чаще всего и применяется. Чем ты занимаешься в IT? CRUDы, наверное, на джанге/фласке+химии проще писать, чем на го.
>>213997
Не можешь в десктопный линукс или вообще в линукс? Если первое - то всё нормально, сейчас всё равно всё в контейнерах, особенно в го.
Если второе - то тебе стоит задуматься, стоит ли вообще заниматься бекендом, независимо от языка.
В консольке с brew и другими утилитами работать умеешь? Если не пугает, то велкам, никаких подводных. У нас около половины гоферов — маководы, остальные сидят на линуксах разной степени красноглазия: кто-то как на главной системе, кто-то дуалбутит, а кто-то компилирует ядро прямо в винде через WSL как я, очень хорошо сделали, разве что скорость доступа к виндовым файлам из-за эмуляции ntfs хромает.
Есть к примеру дефолтное круд приложение. Что то забираешь из базы, что то пишешь, и результат отдаешь через апи
Это же никак от быстродействия самого языка не зависит, а только от скорости обработки в бд. Ну если это не хайлоад какой конечно, хотя в кубере можно все разбалансить
Короче, тут наверное много питонистов в прошлом, к вам вопрос, почему вы решили пересесть на го, если 90% задач одинаковые что там, что тут?
На го у нас написана веб морда, которая обслуживает дохуя конектов и делает запросы в другие сервисы с бизнес-логикой на питоне обмазанным типизацией
>а как так? фастапи?
Нет, просто обмазались mypy и окунаем в говно на ревью, если отсутвтуют типы в местах, где они помогают понимать код
Сука, ну нахуя они эту тильду сраную сделали? Нельзя было её поведение сделать по дефолту что-ли?
Какая-то хуйня без задач.
И это насколько ж надо быть душным, чтобы высрать такую простыню. А ещё что-то на "сложные" кресты гонят.
Если умеешь распределенные системы строить то как на нормального человека, если нет то как на вкатыша
Кодеры в массе своей это и есть чсвшные мудаки. Я в Ciklum сходил когда-то на собеседование, меня там чуть-ли не унижали
Что та хуйня, что это хуйня. Выбирай по задачам, жизнь от одного отдела к другому сильно отличается
Ну, на го они более вербозные, и дело даже не в обработке ошибок. Но писать можно, и за них платят немного больше чем на других языках.
Из плюсов - неплохой баланс между временем написания и производительностью сервиса. Но как и почти много где - можно немного сдвинуть этот показатель в ту или иную сторону, например используя sync.Pool можно добиться практически полного отказа от аллокаций в хипе ценой сложности написания кода, или использовать пустые интерфейсы+рефлексию, чтобы делать универсальные библиотеки, но ценой производительности.
Но главная особенность го - это всё-таки работа с асинхронностью.
Если всё что тебе нужно - это аналог js-ного Promise.all, то ты, конечно, не ощутишь разницу, в этом плане sync.WaitGroup более неудобная штука. Но зато она даёт куда больше возможностей, особенно в сочетании с каналами.
нах справшиваешь, где больше денег пообещали, туда иди.
ходил с ними общаться, у вк зп пощедрее, а у озона зато щедрые опиционы. остался у всебя, в другой компании из вотвася
а я чет не врубаюсь, что тильда делает в определении типа?
гугл подскаживает только битовое не
https://github.com/golang/go/issues/45346
> An approximation ~T is only valid if the underlying type of T is itself T
Смотри, у тебя есть
type MyString string и функция, которая принимает []string
С тильдой ты сможешь использовать эту функцию для []MyString без приведения типа в цикле.
Пиздец дегроды. В нормальных языках вообще никакой разницы нет и никакие тильды не нужны.
Это синтаксическая соль. Сделано специально, чтобы не хотелось юзать дженерики.
А err != nil специально, чтобы не хотелось обрабатывать ошибки
Ну, в целом это нужно для создания энумов, иногда полезно указать, что у нас не просто стринг или инт, а что это какой-то конкретный флаг или ключ, в общем случае тип у которого лимитированное количество валидных значений, как например syscall.Signal или syscall.Errno
на го джуны практически не нужны
сам язык простой, но его используют, когда сложность систем уже высока
работай на питончике, пока не почувствуешь себя крепким миддлом, параллельно попробуй втащить на работе какой-нибудь сервис на го, а потом дуй к нам на x2
А мне наоборот пришлось откатиться до богомерзкой джанги, так как платят больше на 50-80к чем на прошлом месте где писал на го сервисы с относительно низкоуровневным сетевым взаимодействием. Однако как мне кажется зря я это сделал, так как стал дико выгорать из-за того что мне это совсем не интересно, ощущение как будто отправили назад учиться в начальную школу лол.
странно, уже второй год гошка рвет всех по зп, кроме скалы
ну и радуйся, мне не хватает джанги - там все было просто и удобно, классные cbv
а здесь эти сраные solid и clean architecture помноженные на вербозность самого го
Идеально описывает место
Никак. Страдай.
Женерики миф, гугл скорее выкинет го нахуй когда его поддержка станет нецелесообразной и сделает что-то новое хайповое, как они это делали уже ни раз.
гошечку уже не выкинут
слишком уж много написано на ней
уже хватает абсолютно всего, со временем появляется и доп. сахар, вроде дженериков
а скок предлагают сейчас?
Все таки кобол не за один день выкинули, а вспомни как флеш мучительно умирал, пердел кашлял, но его до последнего порносайты и казино использовали, пока не исчезли браузеры с ним.
Немного написано. Когда писали на коболе, айти индустрия была на порядки меньше. Но на коболе написаны некоторые критически важные системы, поэтому он жив и вероятно переживет зумеров.
Есть джейсонины произвольной структуры. Их надо переложить в другие джейсонины, где все поля объектов с именем "fizz" будут называться "buzz".
Ты случайно не нодежс макака возомнившая себя богом джейсонов из-за пары функций в стандарте языка?
JSON = JavaScript Object Notation
Ноджс-адепты боги джсонов по определению.
Но ты решай, решай, не отвлекайся. Там всего-то джсоны переложить.
Да регуляркой заменить "fizz"\s∗: на "buzz": и не ебать мозг. У вложенных жысонов внутри строк кавычки будут экранированы, так что должно быть правильно. Хуйня задача. Лучше будет смержить два жысона произвольного формата, вот там пиздец, да. Нужно json.RawMessage парсить в map[string]interface{} и дальше рекурсивно спускаться. Енджой ер статик типизейшн, епта.
Так javascript прошивка для json?
Тащемта да. Причем если это будет уже не JSON, а XML то вообще ебать цирк с конями начнется. Дефолтные encoding/xxx либы вообще по-уебански как-то сделаны с этим маршалингом непосредственно в гошные структуры. Для простых случаев может норм, но когда надо с документами вытворять всякое, то случается пук.
Fizz-buzz это так для разминки. В реальных задачах такими костылями не отделаешься.
У нас так его взяли для бэка, ведь хайпово, молодежно, быстро и надежно, и вообще бэк только хатэтэпе-методы дергает, а оказалось что таки да, надо ещё кое-какую бизнес-логику там крутить.
Условие перечитай, дебик.
> поля объектов с именем "fizz" будут называться "buzz"
Поля с именем, а не значения полей, содержащих подстроку.
>>221162
Ну вот я тебе получше задачу дал, более практическую: смержить два жысона. Типа {"foo":{"bar":1}} ⨁ {"foo":{"baz":2}} ≡ {"foo":{"bar":1,"baz":2}} На любом языке с статической типизацией это боль подобное реализовывать.
> Нужно json.RawMessage парсить в map[string]interface{} и дальше рекурсивно спускаться.
Тут надо делать структуры, в которые раскладываются разобранные жсонины, по типу как DOM для XML, и делать функцию для слияния, которая из двух таких создает третью. Обычный map[string]interface{} например будет проебывать порядок полей.
> Обычный map[string]interface{} например будет проебывать порядок полей.
> An object is an unordered set of name/value pairs. https://www.json.org/json-en.html
Че?
Знаешь, жсонины иногда читают люди, а иногда даже суют из в diff. И тут ты такой: а срать мне на ваш порядок полей, в спеке не написано, щас всё перемешаю к хуям собачьим и хавайте что дали.
Да как бы далеко не всегда. Чаще всего в них самые обычные бизнес-данные типа профайлов пользователей. Так-то похуй, в каком порядке поля, но если вдруг надо будет продиффать два таких документа, то лучше чтобы порядок имелся.
Тогда нехуй в виде ключей в мапе хранить.
Ну вот когда диффать потребуется, тогда на лету и канонизируешь через jq --sort-keys, а до этого нехуй требовать выдуманную из пизды дополнительную структуру, спекой не предусмотренную.
Вот вам наше джейсон апи. Требования к клиенту: он должен быть написан на жс или другом языке для даунов, где объекты по спеке не итерируемы но фактически соблюдается порядок ключей при сериализации в ждейсон...
Лексиграфически, епта. Спека не устанавливает порядок полей, поэтому сериализовать можно как угодно. Строго говоря, это всего лишь костыль имеено что для наколеночного диффа, т.к. для каноникализации этого недостаточно, нужно иначе убирать половину флоатов и все эскейп последовательности, кроме кавычек.
>Для простых случаев может норм, но когда надо с документами вытворять всякое, то случается пук.
Хуйню спизданул.
Кстати не знаю как json, но fmt пакет сортирует ключи мапы.
Хейтер, спок. Наслаждайся последними деньками с возможностью высраться на тему дженериков, скоро будет неактуально
А может я перестану быть хейтером, когда сабж станет похожим на привычные мне языки, кто знает.
А зачем делать еще одину жабу, шарпы, котлин или тайпскрипт? или что ты там котируешь? Пусть лучше будет куча языков, хороших и разных.
Вот это плюсую. Две пагубные тенденции имеют место быть
Чтобы все языки были похожи 1 в 1
Быть программистом язык нейм, а не просто быть программистом.
Жаба старая, котлин не нужен (фичи котлина переносят в jdk, а теперь еще loom в превью), шарпы забивают на обратную совместимость и закрыли себе дорогу в энтерпрайз (кроме Windows-house компаний), тайпскрипт это попытка мелкомягких подмять под себя js хипстеров(EEE).
Го единственный современный язык, который массово принял бизнес и инвестирует в него ресурсы
>Го единственный современный язык, который массово принял бизнес и инвестирует в него ресурсы
В последние годы Го развивается с той же скоростью, что и жаба в период с 6 по 8 версии, то есть почти никак. Так что не знаю, какая тут современность. Вот если дженерики будут вменяемые, то уже да, значительный шаг вперед.
>Жаба старая
Тем не менее на ней очень много всего пишется, да и в чем старость? Стримы есть, лум наверняка будет к следующему LTS или через один LTS, для всякой энтерпрайзной еботни вроде банков, финтехов, ритейла, где куча бизнес-логики и нужна поддержка десятилетиями, это отличный вариант, как ни крути.
А что не так? Узкий специалист всегда будет знать в своей области поболе челов, которые распыляются на 100500 языков.
Нет. Челы делятся на тех кто развивается и тех кто остановился в развитии. Раньше например среди пыхарей было много CMS простофиль, времена меняются, теперь полно непробиваемых laravel + vuejs кулибиных. Их попроси сделать сервис конвертации видео, они начнут его делать на пхп очередях просто потому что они встроены в ларавел.
Ищу себе в команду аутистов в области edtech 2 мидл+ гоферов, можно в офис мск/питер, можно чистая удаленка, новенький макбук, дмс, полный список уже обычных для всех компаний плюшек.
вилка 200-400, в зависимости от левела, для рокстаров - обсудим отдельно
если интересно - пишите на
я вас перенаправлю на херочек, которые проведут по процессу найма
а то они блин деревьев в лесу сами не найдут
Я в банке работаю, у нас дохера всего на го, от обработки транзакций, до всяких бизнесовых приколюх, акций и тп.
Полёт нормальный.
Примерно одинаково на всех языках будет написано. В го можно смапить json'ину в map[string]interface{} и рекурсивно пройтись по всему этому говну с коллбеком `func (obj interface{})`, где можно поменять исходную мапу. Работать будет в целом нормально, пока json не раздуется до тех размеров, когда придется потоковый процессинг писать.
Девопс, пчёл. В сравнении с питоновским/пхпшным/перловым/башевым говнокодом админов - вообще сказка
Ога, бинарные скрипты с километровыми исходниками, которые хуй по-быстрому поправишь, просто топчик.
Да, только не перл, а питон. Там кто угодно разберётся и поправит быстро. Кроме тебя, видимо.
врядли, у них все процессинги уже дервние, на джавах/скалах
хотя гошка есть и у тех, и других, но на небанковыских направлениях
Это то что не приват
https://www.youtube.com/watch?v=ZACOc-NwV0c
Видимо ты не до конца понял, для чего нужна штука, которую она рендерит
А аутисты проект двигать смогут? У нас на крупные фичи раз в пару месяцев общий сбор и обсуждение на 1-2 часа.
Хочу в начале след года ( до весны) сменить стек, сейчас вот начал к ГОвну присматриваться
Когда менял стек я соврал про 1.5 года опыта на го. Какая разница, если я всё равно знал как CRUDы писать на го и писал их на других языках?
в резюме у тебя что написано то, что работал у Кабан Кабаныча на ГОвне? нет ведь
хотя я тоже могу скромно написать что просто бэкэндером провеслал 2 года
C какого стека уходишь? Если с пхп или питуна, то перекатиться легко, сейчас полно проектов, которые решили зачем-то переписать с них на ГО.
SAP opentext, писал круды все как полагается. Но оставаться и дальше на этой поделке нет желания, потому что развития я тут не вижу
>solid и clean architecture
А я думал в сообществе Го мартиновский буллшит котируется меньше, чем в других стеках.
Не мог бы ты раскрыть? Ты хочешь сказать, что для них в рантайме отслеживается тип того, на что они указывают? Насколько я знаю, размер unsafe.Pointer - честный один указатель и объекты в Го не имеют префикса с указателем на RTTI (как в Java/C++). Как же это тогда работает?
Мне кажется, в этом плане ПЩ сейчас, наоборот, самый дружелюбный к перекатывальщикам. Если в резюме не хватает баззвордов, можно вспомнить всё говно, с которым ты работал, не зависящее от языка (Я кэп, да).
добавьте в шапку эту писанину китайца - https://go101.org/article/101.html
оно стоит того
Так изи же, сменил Java->Go с х2.5 без коммерческого опыта на говне
Без коммерческого опыта вообще не вкатиться?
Если бы рынок дотнета не был полной залупой, то даже бы не раздумывал. Но увы, в го меня не пустят, а остается пыха или джава
Вкатиться реально, и даже легче чем в js/питон, т.к. говнокурсов по го не так и много и он не так популярен среди вайтишников, а компаниям нужны ждуны
Ну что же вы, гоферы... Кто-то же должен знать, здесь же элита всея российского IT сидит.
Не читал особо код рантайма, может там что-то по другому работает, чем для обычных кодеров (хотя я сомневаюсь), но в общем случае с unsafe.Pointer'ом мало что полезного можно сделать. Но если мы точно знаем что это поинтер на интерфес (например пустой) - из него мы можем получить реальный тип
Пару раз в год появляются вакансии на джуна без коммерческого опыта, так что шансы есть. Ждать придется долго. А может и нет.
Джунов туда не берут, сеньор на других языках будет получать больше (ибо куча опыта обнулится ради хуй знает чего), вот и остается куче дурачков, которые не смогли на своем исходном стеке быть успешными, конвертиться в GOвноедов, сражающихся на арене ради 200к пример есть даже в рашке - см. озон где полтысячи говноедов работают за такую зепе над обосанным магазином резиновых тапок, зато на GO ПИШУТ
В общем, если вы посредственность - отличный язык, всем остальным не рекомендую.
Java - это карьерный выбор хуевого мыдла.
Джунов туда не берут, сеньор на других языках будет получать больше (ибо куча опыта обнулится ради хуй знает чего), вот и остается куче дурачков, которые не смогли на своем исходном стеке быть успешными, конвертиться в Javaдебилов, сражающихся на арене ради 200к пример есть даже в рашке - см. озон где полтысячи Javaдебилов работают за такую зепе над обосанным магазином резиновых тапок, зато на JAVE ПИШУТ
В общем, если вы посредственность - отличный язык, всем остальным не рекомендую.
Java-петух пригорел
У гоферов ЗП на уровне джавы, пыхи джээсы и питоны оплачиваются ниже.
Пиздуй поддерживать абстрактное легаси говно в говнобанке, раб
Как будто нельзя писать на нескольких языках, на всех проектах бек был на 2-3 языках написан.
вкатиться, со мной в отделе работает 30-летний вкатун после курсов. мне никто не поверит, конечно...
ну вот в январе начну бегать по собесикам, сейчас гошечу пока подтяну
скажи гит свой( если есть)показывал кому нибудь на этих 3 собесах? и просили ли тебя ин риал тайм решать задачу
> сейчас гошечу пока подтяну
Обрати внимание на асинхронность, и работу со встроенными типами, в т.ч. что происходит при работе с нулевыми значениями разных типов
> скажи гит свой( если есть)показывал кому нибудь на этих 3 собесах?
Указан в резюме, но там на го ничего не было, да и на других языках там хелоуворолды разного уровня встратости. Но да, 2-х летней давности.
> и просили ли тебя ин риал тайм решать задачу
Почти на всех собесах давали небольшое тестовое задание уровня CRUD сервис запилить. На одном из собесов дали 10 снипитов уровня https://habr.com/ru/company/vk/blog/314804/ и спрашивали что выведет, но нигде прям лайфкодинга не было
Ну да, просрать 2.5 года жизни, кучу нервов и денег впустую, чтобы просто числануться без сраной бумажки в итоге.
бедный ребенок(
Да, это правильно, не как некоторые с нуля пытаются вкатиться в язык для миддлов без опыта.
Потому что в силу простоты делают больше задач для бизнеса, а не меряются сложностью языка и количеством легаси, как жабошарпобляди.
Ну ты и лошок
https://vc.ru/trade/182301-it-specialisty-wildberries-zhaluyutsya-na-massovye-uvolneniya-a-marketpleys-ih-otricaet
год назад такая хуйня была, короче к тебе будет отношение такое же как и к грузчикам на складе
Так все правильно. Какое ещё может быть отношение к взаимозаменяемой печатающей мартышке.
Блин, а что, так можно было? Почему тогда ещё не всё новые бэкенды пишутся на Го?
Потому что ещё нет такого количества разрабов на го, а у крупных организаций нет ресурсов на замену жабошарпоблядей гоферами, вот и приходится писать на том, что все знают.
> В каких случаях нужно использовать буферизованный канал
В общем случае - когда ты хочешь делать select+send/receive с дефолтом, чтобы не зависать на этой операции, если на другом конце слоупочат. Воспринимай этот тип канала как внешнюю очередь сообщений.
>в каких не буферизованный канал
Во всех остальных случаях, т.е. когда нужно синхронное взаимодействие по аналогии с http-запросом
> Как подобрать размер буфера?
В большинстве случаев это либо 1, либо по количеству горутин, которые могут туда записать сообщение, это может быть удобно, когда нам нужно получить только самый первый результат или самую первую ошибку (т.е. мы читаем из канала только один раз), но при этом не создав утечку горутин.
Бывают еще экзотические варианты, вроде вебсокет-чатов, где имеет смысл брать большие буферы под каналы для отправки контента конкретному пользователю, но там значения подбираются экспериментально, обмазывайтесь логами и мониторингом.
Джава мертва
Это связано не с тем, что джава хуевый язык или платформа говно, а потому что сейчас все становится cloud native. Нужно уметь быстро запускать небольшие сервисы, а не ждать по 3 часа, пока спринг фреймворк будет делать свою подготовительную магию.
Решением был бы quarkus/micronaut вместе с graalvm, только вот проблема в том, что со спринга очень тяжко перейти на новый фреймворк. По сути большая часть джава проектов намертво увязла в спринге, который годится для классических старых серверов с виртуалками, расположенных где-то в датацентре банка, а не для сервисов, крутящихся где-то там в амазоне.
> что со спринга очень тяжко перейти на новый фреймворк
Поэтому надо всё выбрасывать и писать с нуля на другом языке языке без инфраструктуры.
Так никто не выбрасывает спринг и джаву в частности. Что уже написано на них - дальше поддерживается. Однако с новыми проектами уже не все так очевидно.
Другой вопрос, сколько вообще новых проектов пилится в индустрии. Существует мнение, что основные прорывные проекты по части инфраструктуры уже написаны, и остаются только круды и поддержка уже существующего легаси.
>>232112
Да еще где-то полгода назад работы было меньше, сейчас даже в таких концентраторах джавистов вроде сбера и тинька появилось довольно много голанг вакансий.
Как это можно использовать? Похоже на интерфейс, но вроде не он
>Гуглил много и ничего похожего не нашёл.
чел, я даже не программист и то понял
гугли golang struct
Это какая-то дич.
> Это связано не с тем, что джава хуевый язык или платформа говно
Нет, связано. Страшно подумать сколько они денег потратили в GC, а всё-таки с аллокациями на стеке это никогда не сравниться. Да и платформа является ненужной абстракцией, в реальности никому не нужно использовать один и тот же билд на железе разной архитектуры ну, кроме как в разработке под андроид
> что тут происходит
По одной структуре не могу наверняка сказать, но думаю что говнокод.
> Как это можно использовать?
Создаешь в замыкании подключение, потом опять же в замыкании суешь реализации этих функций в структуру, а затем возвращаешь структуру. Профитов никаких, кроме того что используешь "функциональные" подходы вместо ООП. Вангую написано каким-то студентом с JS-ом головного мозга
Всякие фреймворки для бигдаты, распределенных систем и клауда.
Тот же zookeeper, hadoop, cassandra, spark, elastic, стек нетфликса - все это требовало огромных вложений как денег, так и людских ресурсов. Сейчас уже основной стек технологий написан, и остается только его поддержка, которой может любой индус заниматься, а не только дяди с пхд по распределенным системам.
Почему про реальные программы никто не пишет? Я к примеру, до сих пор не понимаю где лучше хранить url для запросов к другим апи - в самом коде или каком-то отдельном файле. Писать отдельные методы для каждого запроса или просто подгрузить конфиг из какого-нибудь json, один хер эти запросы не меняются кроме пары ключей. Ничего этого нет.
90% статей в айти - как написать хеловорлд.
да вот взял отпуск на декабрь, посижу нг выходные и пойду по собесикам бегать в поисках своей сотыги! а там глядишь и сбегу от своего кабана к другому но уже на ГОвне
Ничего не значит. Просто есть категория шизиков, которые каким-то образом умудряются найти связь между гитом, микросервисами и эджайлом.
Переработки.
>zookeeper, hadoop, cassandra, spark, elastic
Это всё инфраструктура и никогда обычными бэкенд-девами не писалось. То, что это всё написано на Джаве, еще не значит, что ковырятели Спринга имеют к этому отношение.
>Если, к примеру, просто разделить проект на более мелкие, которые общаются между собой вебхуками, это считается за микросервис?
Если различия только в этом, то это распределенный монолит, микросервисы должны быть потенциально независимы друг от друга, в том числе и в плане масштабирования
В большинстве случаев нихуя, но иногда в этом свои приколы, тут от компании зависит и от того что пилится и как. Где-то это всё хуйня, Миша, давай по новой и так каждый спринт, жизнь в вечной переделке. Где-то должны обосраться но успеть всё в спринт и похуй что у тебя жена рожает, Сычёв. Где-то это как в книжке написано плиннинг в начале, ретро и демо в конце, промежуточные синки, дейлики, 1+1, разноцветные стикеры миро, 2 часа обсуждать сколько сторипоинтов будет перекрасить синюю кнопку в зелёную и прочая залупа, а в перерывах между созвонами в зуме пилишь хоть какой-то код. Где-то это упирается в то что хуй чего по быстрому сделаешь в команде, у Ололоева на этот спринт задачи есть, а то что тебе сейчас нужно будет заложено в следующий спринт через 2 недели.
Надо будет им написать)
Я другой анон. Просто если еботня как с растом или с++, то не очень хочется связываться.
Ну, они вполне независимы, со своими бд. Просто для того чтоб работал один сервис, должна приходить информация от другого. К примеру, один считывает данные с сайта и отправляет его в пользование другим сервисам, которые выкладывают её каждый на своём сайте.
Или это должны быть вообще несвязанные между собой вещи? Так это совсем разные проекты получается, а не микросервисная архитектура, если они каким-то образом должны работать, если отвалилась основная.
Если сравнивать с питоном и любям языком где есть ооп, то го отличается кардинально.
>Процедурныя язык
>Сильно отличается от языков с поддержкой ооп
Ебало этого говноеда представили?
А на чем еще писать, кроме как на жабе в те времена? Из ООП языков только она была достаточно простой, чтобы избежать кучи ошибок, и кроссплатформенной.
Сейчас на С++ стало чуть легче пользоваться, поэтому возможно на них будут писать дальнейшие инфраструктурные проекты.
А так, даже сейчас тяжело предложить иные альтернативы жабы в таких проектах. Написать на Го hadoop или elastic имхо будет тяжело. Хотя тот же Zinc как замена эластика уже существует.
глянь растланг
А это кто?
Го - процедурный язык.
Из плюсов могу выделить, что это может быть просто интересно, с нуля собирать свою инфраструктуру под проект.
С другой стороны, когда ты увольняешься и приходишь на другую работу, то там уже стек технологий будет отличаться. И что тогда?
Почему до сих пор нет единого фреймворка вроде laravel/django/flask/asp.net/spring?
>Почему до сих пор нет единого фреймворка вроде laravel/django/flask/asp.net/spring?
Это придумано для людей с низкими умственными способностями, которые будут работать за копейки винтиком в системе
>С другой стороны, когда ты увольняешься и приходишь на другую работу, то там уже стек технологий будет отличаться. И что тогда?
Будешь расти как программист-инженер, а не останешься макакой одного фреймворка
>Будешь расти как программист-инженер
Но ведь разве не инженер собирает проект из уже готовых частей?
>>232995
>не останешься макакой одного фреймворка
Ну, справедливости ради, стек технологий так или иначе меняется от проекта к проекту, но основной фреймворк остается.
Другое дело, что ковыряние в криво написанном велосипеде не факт, что даст полезный опыт. А если ты джун/стажер, то придя на проект с таким велосипедом, потом перейти на другое место работы будет просто тяжело. Или нет?
>Почему до сих пор нет единого фреймворка вроде laravel/django/flask/asp.net/spring?
Мне кажется не хватает гибкости языка, например без тех же дженериков много чего уже не сделать, плюс ещё в го нет макросов, аннотаций, наследования и сделать какой-нибудь фреймворк в таких условиях довольно сложно. Поглядим когда дженерики завезут.
> Почему до сих пор нет единого фреймворка
По тому что в отличии от того же питона и js-а в го стандартный сервер вполне юзабельный, для нашего прода его вполне хватило.
>>233030
> нет аннотаций
Есть теги полей структур
> наследования
Есть встраивание
Внезапно этого набора вполне хватает, чтобы написать тот же GORM. А дженерики единственное что изменят - для пользователя это будет чуть-чуть удобнее, т.к. тогда вместо пустых интерфейсов будут конкретные типы но под капотом всё равно будет тонна рефлексии
В итоге все проекты на го - велосипеды разной степени паршивости. Казалось бы, язык позиционируется для ускоренной разработки, но на практике всё с точностью до наоборот.
Прежде чем писать на го, надо убить пару месяцев на создание собственных библиотек. Это типа круто, позволит расти и так далее. Ну напишите тогда на брейнфаке сервер, это же позволит вам вырасти ещё лучше.
Почти в любой серьезной конторе есть свои фреймворки и обвязки типо консьюмеров/продюсеров, rpc, клиентов для взаимодействия с другими сервисами. И это не зависит от языка.
Тебе вкатунцу виднее.
если внутри тестов, то похоже на мок. еще может быть конфигом для настройки хуков, но по названию не похоже. еще мб они там динамически эти функции меняют зачем-то
>Идешь в другую контору - становишься джуном.
Если ты макака которая нихуя не соображает то да, весь бэк примерно одинаковый. Основная сложность это предметная область и общее понимание как работает система, а не инструменты с помощью которых выполняются задачи.
Ну, если у тебя есть время каждый проект писать с нуля, то видимо дальше курсов с ютуба ты не ушёл.
Как в этом случае они будут работать?
>Ну, если у тебя есть время каждый проект писать с нуля
Что ты несешь поехавший, причем тут писать проект с 0 и общие библиотеки и фрейморки всей компании?
Ну, реверс-прокси просто начнёт делить запросы между ними пополам, не совсем понимаю, что ты имеешь ввиду.
Ну мы коннектимся к grpc серверу по адресу и порту. Как запустить ещё один инстанс микросервиса чтоб к нему бвл доступ на этот же порт и адрес? Или в докере мы запускаем несколько инстансов и он каким-то образом будет их выводить на один порт?
Просто пишут, что микросервисы хороши тем, что если не хватает ресурсов, можно просто запустить ещё один инстанс и не париться. Как это работает не совсем понимаю
Внутри докера крутится DNS сервер, который переводит доменные имена в айпишники. Если у тебя несколько инстансов сервиса с одним именем, он будет делать round robin между инстансами. Можно извратиться и сделать куда более замороченнее и эффективнее, но по умолчанию балансировка идет на уровне DNS.
Почитай, что такое load balancing
Кто нибудь обьяснит мне, как писать на ЭТОМ. Именно всякие common best practices.
Смотришь код приложений, каждое - абсолютно уникальное блять со своими непонятными на первый взгляд велосипедами. Или же это хелловорд и хуй поймешь как это дальше разрастаться будет.
Как структурировать приложение (и че за internal)?
Допустим, я хочу связать graphql и postgres, и чтобы схемы красиво генерились, и чтобы говнокода мало было, и миграции работали. Как это сделать?
Насчет структуры, нашел годный ответ тут: https://github.com/golang-standards/project-layout/blob/master/README_ru.md
Это гуглоперевод? Что за пиздец?
Если бы мне было похуй на чем кодить, я б взял жиес и вопрос этот не постил. Так что, нет
жс не трогай, вкатыш. Я на него три года назад с крестов перешел, до сих пор доволен.
>от создателей таких шедевров, как UTF–8
а эмодзи не они делают? могут ли создатели utf-8 перевернуть свою строку?
Это будет посложнее, чем перевернуть дерево.
Еще у них сайт с вакансиями максимально всратый, мало того, что информация не очень хорошо структурирована, так еще и рекламу какого-то говна предлагают смотреть.
Ебать самодур, сам же не обозначил чёткие границы ответственности между командами, сам же и страдает потом. Да и общение как с грузчиками, работать в этой хуйне себя не уважать
> The reason ?: is absent from Go is that the language's designers had seen the operation used too often to create impenetrably complex expressions. The if-else form, although longer, is unquestionably clearer. A language needs only one conditional control flow construct.
Виноваты говнокодеры, а отдуваться языку. Пиша на Го, ты похож не на свободного человека, а на овоща в подгузнике и смирительной рубашке в комнате с мягкими стенами
Интересна мне именно веб-разработка.
Различные стартапы и веб-сервисы.
Правильно ли я думаю, что если начну с go, то голова не будет забита корявыми практиками из js, nodejs и php?
И что это лучший язык для вката в веб, судя по его производительности и тому, как все его хвалят?
Лично мне он ооочень интересен, меня, как перфекциониста, привлекла его концепция и подход.
Двачую
Я как понял концепцию языка всё должно быть простым как мясорубка и должен быть только один путь решения
Тут фишка не в тупости разработчика, а в доступности для бизнеса. Можно взять разработчика из любого языка с любым уровнем и через неделю он уже сможет что-то писать, ему не нужно будет постигать азы синтаксического сахара годами и он сможет легко читать чужой код, это хорошо работает для бизнеса, позволяет быстро и без особой боли найти разработчиков на проект и быстро что-то выкатить.
Но да писать на нем больно, особенно обработка ошибок лютый пиздец
Опечатался, быстрофикс) Как-то так
> Различные стартапы
Там очень важна скорость разработки, нужны жирные и многофункциональные фреймворики, ORMы, а так же большое количество дешевых джунов с рынка труда.
У го по всем этим пунктам не очень: скорость разработки, конечно, выше, чем у языков без GC, но немного ниже, чем у популярных в вебе языков, фреймворки и ORMы в го, конечно, есть, но их не принято использовать, да и ебаться в пустые интерфесы тоже то еще удовольствие, по этому писать сырой SQL считается тут нормой, да и джунов на рынке на одну вакансию на порядок меньше чем на жыэс или питон.
Будь я CTO в стартапе - у меня на go были бы только k8s операторы, а всё остальное скорее всего на Nestjs + TypeORM + PostgreSQL, просто по тому что решает большинство задач.
> Правильно ли я думаю, что если начну с go, то голова не будет забита корявыми практиками из js, nodejs и php?
Говнокод есть в любом языке, язык сам по себе не сделает тебя говнокодером. Другой вопрос, что в каждом языке есть свои особенности, которые тебе нужно будет учитывать и уметь обходить. Например в js-е это неявный каст типов, в питоне в случае асинхронного кода следить за тем, чтобы не было синхронного io в зависимостях и так далее.
> И что это лучший язык для вката в веб
Го, как любой другой язык - это просто инструмент. Прикладные задачи, типичные для бекенда, (читай - CRUD) на го писать можно, но сложнее чем на более популярных языках, а значит более дорого для бизнеса. А те вещи, в которых го хорош, вроде удобной работы с асинхронностью или стримами (сравните https://nodejs.org/api/stream.html и https://pkg.go.dev/io) - это далеко от ежедневной работы обычного бекендера. Вроде на бекенде есть где развернуться с асинхронностью, но на практике кроме errgroup почти никогда ничего не нужно, т.е. по факту это тот же asyncio.gather или Promise.all
> И что это лучший язык для вката в веб
Из плюсов - относительно маленькая конкуренция на рынке труда и зп чуть выше чем на других языках
Из минусов - относительно маленькое количество вакансий, особенно ждуновских
> судя по его производительности
Производительность нужна только крупным дядям, вроде банков, яндексов и озонов, только они могут почувствовать разницу с той же нодой.
> и тому, как все его хвалят
Разве что девопсы, им он действительно зашел как замена баша+питона.
> Лично мне он ооочень интересен, меня, как перфекциониста, привлекла его концепция и подход.
Ну тогда успехов во вкате, что я могу сказать. Ну и да, единственный способ научиться программировать - это программировать, по этому очень рекомендую написать форум/борду/блог, используя стандартные net/http и database/sql пакеты, без этого я бы не шел на собеседования.
Если не получиться вкатиться с го - рекомендую тайпскрипт
> Различные стартапы
Там очень важна скорость разработки, нужны жирные и многофункциональные фреймворики, ORMы, а так же большое количество дешевых джунов с рынка труда.
У го по всем этим пунктам не очень: скорость разработки, конечно, выше, чем у языков без GC, но немного ниже, чем у популярных в вебе языков, фреймворки и ORMы в го, конечно, есть, но их не принято использовать, да и ебаться в пустые интерфесы тоже то еще удовольствие, по этому писать сырой SQL считается тут нормой, да и джунов на рынке на одну вакансию на порядок меньше чем на жыэс или питон.
Будь я CTO в стартапе - у меня на go были бы только k8s операторы, а всё остальное скорее всего на Nestjs + TypeORM + PostgreSQL, просто по тому что решает большинство задач.
> Правильно ли я думаю, что если начну с go, то голова не будет забита корявыми практиками из js, nodejs и php?
Говнокод есть в любом языке, язык сам по себе не сделает тебя говнокодером. Другой вопрос, что в каждом языке есть свои особенности, которые тебе нужно будет учитывать и уметь обходить. Например в js-е это неявный каст типов, в питоне в случае асинхронного кода следить за тем, чтобы не было синхронного io в зависимостях и так далее.
> И что это лучший язык для вката в веб
Го, как любой другой язык - это просто инструмент. Прикладные задачи, типичные для бекенда, (читай - CRUD) на го писать можно, но сложнее чем на более популярных языках, а значит более дорого для бизнеса. А те вещи, в которых го хорош, вроде удобной работы с асинхронностью или стримами (сравните https://nodejs.org/api/stream.html и https://pkg.go.dev/io) - это далеко от ежедневной работы обычного бекендера. Вроде на бекенде есть где развернуться с асинхронностью, но на практике кроме errgroup почти никогда ничего не нужно, т.е. по факту это тот же asyncio.gather или Promise.all
> И что это лучший язык для вката в веб
Из плюсов - относительно маленькая конкуренция на рынке труда и зп чуть выше чем на других языках
Из минусов - относительно маленькое количество вакансий, особенно ждуновских
> судя по его производительности
Производительность нужна только крупным дядям, вроде банков, яндексов и озонов, только они могут почувствовать разницу с той же нодой.
> и тому, как все его хвалят
Разве что девопсы, им он действительно зашел как замена баша+питона.
> Лично мне он ооочень интересен, меня, как перфекциониста, привлекла его концепция и подход.
Ну тогда успехов во вкате, что я могу сказать. Ну и да, единственный способ научиться программировать - это программировать, по этому очень рекомендую написать форум/борду/блог, используя стандартные net/http и database/sql пакеты, без этого я бы не шел на собеседования.
Если не получиться вкатиться с го - рекомендую тайпскрипт
Благодарю за ответ!
Ещё есть iota, вообще пиздец.
Зачем эти методы руками писал, оно разве само не работает, как с json-ом?
Есть ли менее ебанутый способ дебага, чем раскидывать принты в каждом if err != nil блоке, а совсем в идеале, собрать чтобы печатало трейс в реальном времени?
Есть
Стоит задача переписать скрипт с питона на что-то такое, чтобы юзер просто нажимал на ехе и все работало. Кроме excelize есть иные библиотеки для работы с Excel? Как в Го ищут нужные библиотеки? В чем разница между go get repo и если просто в импорте прописывать? Сорян за нубские вопросы, если чо.
Реально, просто возьми Pyinstaller, как чел выше сказал, там буквально одну комманду ввести и будет тебе экзешник.
Есть. Например ты можешь запустить его в режиме отладки (понадобится голанд чтоб было удобно), либо добавить логирования на каждый чих.
на стажировку был тестик вопросов из 20 вроде того как расшифровывается хттп с вариантами ответа, несколько по базовому синтаксису гошки вроде что выведет программа, пара вопросов вроде напишите физбазз (неиронично) на языке на выбор, потом беседа с интервьюером, который смотрит твой тестик и мб спросит из чего состоит слайс и что-нибудь вроде напишите селект запрос с хевингом. саму гошку в принципе знать необязательно было, я тур оф го только прошел и проебался на нескольких вопросах в тесте по гошке. ну меня в итоге эта контора пидарасов в 2020м на хуе прокрутила, когда движуха была конечно, но я с годиком опыта с повышением зп переустроился, так что вообще не жалко.
У го немного другая сфера применения.
> Как по вакансиям?
Сильно зависит от предметной области. На девопс много, на остальное - сильно меньше.
Осталось ещё выпилить var, имена переменных писать после типов, впилить эксепшены, классы, аннотации, сделать неиспользуемые импорты и переменные варнингами, впилить вменяемые тулзы для сборки и менеджер пакетов.
на сколько и как перекатываются мидлы с 3+ годами опыта в других ЯП в го?
Не знаю кто эти гоферы, но разработчики языка никогда не говорили что они не нужны. Они только говорили, что есть проблемы, связанные с имплементацией дженериков, и придется чем-то пожертвовать, или размером бинаря и скоростью билда или скоростью в рантайме. Надеюсь выбрали первое
https://go.dev/blog/survey2019-results
>2020
К этому моменту они уже заебались слышать о необходимости дженериков. До введения в черновики стабильно кричали нинужна и ссылались на высеры пайка.
Сука, второй раз
>Т.е. по твоему гугламисты в хорошем смысле это фанатики и адепты "ненужнасти", а не инженеры с огромным опытом?
Так они их и не собирались реализовывать до момента, когда на них начало комьюнити налегать. Если бы не этот опрос, то до сих пор бы они отодвигали решение на долгий срок, так как не считали это необходимым для нормальной разработки.
Жопу вытирать тоже нинужна?
>менеджер пакетов
Вот прям две вещи, которые я хочу - нормальный менеджер пакетов и более адекватный отлов ошибок. С остальным я готов мириться.
> Так они их и не собирались реализовывать до момента, когда на них начало комьюнити налегать.
Ты пытаешься меня убедить, что человек, который имеет огромный опыт на плюсах и еще куче всего пишет эту хуйню и приговаривает "Как же хорошо, что нет дженериков, а то хуйня какая-то была бы". И при этом это не рандомный >>240213 с двача, а рокстар, получающий 300к $ в наносекнду в гугле. Нет, я не поверю в это никогда.
>Ты пытаешься меня убедить, что человек, который имеет огромный опыт на плюсах и еще куче всего пишет эту хуйню и приговаривает "Как же хорошо, что нет дженериков, а то хуйня какая-то была бы"
Эти люди сделали уебищную систему прокидывания ошибок и всратейший пакетный менеджер, который выглядит более всрато, чем установка *-dev пакетов в пользовательское окружение, а дженерики добавили только когда их активно начало пинать комьюнити. Причем они не придумали ничего лучше, чем сделать квадратные скобки в текущей реализации, хотя такое решение можно было и в нулевых запилить.
Ого нахуй
Не могу въехать, для чего нужны руны? Типа они показывают какому символу какой код в таблице Unicode соответствует?
Что это и для чего? Гуглил объяснения, но там всё как-то сложно, как для начинающего.
Прошел го тур, разобрался вроде с базовой хуйней, полез смотреть в ютубе как собирают простейший веб сервер.
И началось нахуй. Куча говна, какие то бест практис, чистые архитектуры.
Я просто там нихуя не понимаю
48 лет
Мало, год на петухоне.
> для чего нужны руны?
Тип данных, который представляет собой 1 юникод символ, по тому что в 1 байт он, скорее всего, не поместиться.
> а дженерики добавили только когда их активно начало пинать комьюнити
Новую методичку подвезли? Сколько раз ты планируешь еще повторять эту мантру? ИТТ уже 2 раза
А сколько раз ты планируешь это игнорировать?
Нормально ли это писать в один канал с двух горутин?
Если на пике горутины в разных потоках, то почему циклы последовательно выполняются, а не в перемешку?
Все равно нихуя не понял, но хотя бы вижу что две функции запустились в горутинах и работают одновременно
Что вообще по каналам обычно передают серьезные ребята? Я туда пишу просто чтобы горутина не кончилась.
>а дженерики добавили только когда их активно начало пинать комьюнити
и прально, нехуй добавлять то, что никому не нужно
Зачем ты серьезно ему отвечаешь? Он же сюда посрать пришел, ему плевать на твою рационализацию.
Там с момента создания их просили добавить. Может у тебя дефолтные и необязательные параметры не нужны, любитель пилить структуры-конфиги?
Понятно.
Закинешь, когда будешь перекатывать.
в го есть всегда 1 горутина это мэйн, горутина это функция которая запускается в отдельном(от потока мейна) потоке(горутине). Фича тут в том что когда ты не обьявляешь горутины, твой код выполняется последовательно. Если ты обьявил горутину то то код перестает быть последовательным, и можно вызывать следующие функции/операторы не дожидаясь работы вызванной горутины.
каналы(как пневматические трубы в офисе чтоб туда пеналы с документами отправлять) создали чтоб был механизм передачи данных между горуинами. в твоем первом пике на 16 строке твоя прога стоит ждет пока канал закроется и можно будет читать из нее, поэтому тебя сначала прокрутился цикол10 строка потом ты послал в канал ИНТ и основная горутина/поток видит это, считывает из канала ИНТ (правда в примере в никуда, такое бывает да), и только потом основной поток/горутина едет дальше.
ттакую синхронизацую надо делать чтоб основная горутина не закончилась пока не законччатся внутренние горутины, иначе будет горутин_ранниг_еррор.
есть еще каналы с более чем одним слотом для данных, их называют буферизированные, их вот удобно использовать когда у тебя с очередью данных скорость вырастет, нежели поштучно их посылать
вообще это лучше использовать когда тебе надо запускать например ГЕТ запрос по тыщю раз, и чтоб не ждать пока они последовательно выполнятся, каждую запустить в своей горутине, так у тебя будут гет запросы одновременно(почти), и ты не будешь сидеть ждать пока сервак к которому ты обращаешься готовит тебе жисончик ПОСЛЕДОВАТЕЛЬНО
вообще есть реальные потоки системы и процессы, и 1 поток системы != 1 горутина, это важно понять, гоха под капотом имеет менеджер горутин(которые крутит гоха) и потоков(которые дала система) и переключает горутины в потоки по какимто алгоритмам, если будешь крудошлепить то не парься даже.
на вскоде пишу, пробовал голанд, но часто колупаю баш скрипты, а в голанде с другими языками чет туго пиздец, но в вс коде надо настраивать настройки, потомучто искаропки там максимально уебищно все сделали
наример на таб там 4 пробела вместо табуляции,
модули/gopath вообще ебано настроены когда ставишь ГОаддон
Руна представляет собой один юникодный символ, который на практике может быть от 1 до 4 байт, в случае емодзи, например. Слайс рун занимает больше памяти чем стринга, т.к. utf-8 позволяет чуть-чуть экономить память и не выделять по 4 байта на каждый символ. При работе с юникодными строками учти, что при обращении по индексу стринга ты обращаешься не к символу с заданной позицией, а именно к байту, который как может быть целым символом в случае ASCII. так и куском любого другого символа. Не знаю что тебе еще сказать, ты лучше сам задавай конкретные вопросы.
У меня есть апи сервер, на котором нужно запускать дополнительные скрипты по шедулеру.
Мне лучше наговнячить отдельные независимые скрипты и засунуть их в линуксовый кронтаб, или найти какую нибудь имплементацию крона в гохе, и хуярить их в основной программе?
Как бы вы сделали? А то я нюфаг, и мне оба решения кажутся костыльными.
Если нет, то я бы сделал свой отдельный планировщик
Я бы сделал k8s CronJob, если вы используете кубер, либо просто https://hub.docker.com/r/willfarrell/crontab + docker-compose если нет.
CURRENT_YEAR всё-таки на дворе, нужно жить в контейнерах, а не на хосте.
я бы сделал простой тайм.слип/тайм.афтер/тайм.тикер, потомушто в 99% случаев похуй что этот крон отработает в полночь или в два часа дня.
Изучаю го и пилю небольший пет проектик, который состоит из двух частей:
1) Модуль, который умеет следить за определенными событиями и определять когда они наступили
2) Модуль-бот для телеги, через которого можно будет подписываться на эти события.
Была идея сделать их как 2 сервиса, что общаются между собой по grpc. Но сейчас кажется, что это плохая мысль: т.к. придется в каждом модуле делать и сервер, который принимает сообщения, и клиента, который их отправляет.
Имеет ли смысл так делать, или хуйней занимаюсь и так никто в здравом уме не делает?
> Но сейчас кажется, что это плохая мысль: т.к. придется в каждом модуле делать и сервер, который принимает сообщения, и клиента, который их отправляет.
Там же кодогенерация
> Имеет ли смысл так делать
Да, но я бы не стал так делать со старта. Просто пиши код модулями так, чтобы в случае необходимости ты мог разделить его на 2 процесса.
Ну и я бы на твоем месте тут добавил очередь с сохранением на диск, чтобы не проёбывать ивенты
Почему Hello World выводится только один раз, а не два?
Не понимаю.
Код элементарный же.
https://go.dev/play/p/229ANIj17pR
Потому что функция main() вызывается, а f() - нет.
Ты выбрал не тот язык для вката. В Go берут исключительно миддлов из других языков. Их и учи.
Но ведь эти две функции одинаковы на первый взгляд.
Можешь объяснить подробнее, если не трудно?
А во всех 3 учебниках по которым я вкатываюсь такие детали не упоминаются.
Мне нравится golang, я осилю.
Есть опыт написания скриптов на js и php в прошлом.
Не одинаковы. Функция с названием "main" - точка входа в программу, и при запуске вызывается сама. О вызове функций с названием "f" нет никаких соглашений, поэтому она и не вызывается, её можно вызвать только самому из функции main или какой-нибудь другой функции, которая вызывается из функции main.
Начал догадываться. Благодарю за ответ.
Не имеет
Прошло 3 недели, а вакансия все еще висит.
Кто-нибудь пробовал туда собеситься? Что спрашивали?
Зачем? В GOPATH лежат разные версии одного и того же пакета, в проекте просто импортируешь нужную.
Что не так с go modules? Про обработку ошибок спрашивать не буду - примерно представляю, какой ответ меня ждет
>а где его брать хз
Ну как же, пишешь на пхп годик-другой, параллельно учишь Го, потом просишься в контору, которая переписывает свое помойное легаси с пхп на не менее помойные микросервисы на Го.
Придумай себе попыт, я не знаю. CRUDы в любом языке мало отличаются друг от друга. Можешь пет-проект сделать за пару вечеров чтобы проникнуться обработкой ошибок.
Нужно отправить пост запрос с вложенным жсоном, приходится создавать две структуры, вкладывать одну в другую, маршалить запрос, потом так же принимать ответом вложенный жсон, опять так же маршалить во вложенные структуры нахуй.
Нет особо никаких других путей что ли?
как же было ахуенно говнячить на питоне
Так и говнячь на питоне. Зачем тебе вообще язык со статической типизацией, если контролировать типы ты не хочешь?
Да кабану кто то внушил что го ахуенный для его мелкобизнеса, что хттп сервер искаробки там работает асинхронно и прочую ебалу, сижу вот уже вторую неделю все свое говно переписываю...
Ну я с пхп 1 год на битриксе работал и еще год на ларе, плюс запилил за месяц небольшой пет-проектик. Хватит на мидла? Хотя что спрашивать, лучше проверить по собесам.
именно
все зависит от компании
где-то будут дрочить тонкостями рантайма и сборщика мусора
где-то алгоритмами
где-то знаниями микросервисов
а ты уверен что даже с прибавкой 30-50% решишь не переходить? всегда можно сказать, что мало предложили и ты хочешь прокачаться и попробовать чуть позже.
Ну у меня положение пока такое, недавно уволился. Пока решаю все дела и думаю куда идти.
С основными структурами данных и какими-то базовыми алгоритмами типа бин. поиска я знаком, но ничего промышленного, кроме как уебищного андроид-приложения из говна и палок, я не делал (пару лет назад ходил в IT школу Самсунга, но разработка под Андроид мне не вкатила).
По синтаксису Go пробежался, немного алгоритмических задач, чтобы его закрепить, порешал, но опять же из-за отсутствия опыта промышленной разработки я не могу, как советовали чуть выше, просто придумать какое-то сетевое приложение и пойти сразу писать его, попутно пользуясь гуглом.
Материалов, рассказывающих с нуля, как взаимодействовать с серверами на Go я, увы, не нашел. Все, что я видел, скорее для людей, которые имели до этого опыт разработки и просто пересаживаются на Go с каким-никаким, но пониманием, как что работает. Есть ли какие-то пути лучше, чем изучать материалы, которые требуют непосредственного написания кода, с условным Питоном (его синтаксис мне знаком), а потом, когда +- буду осознавать, что к чему, пытаться делать все то же самое, но уже с помощью Голанга? Есть, конечно, мнения что, Go как первый язык учить - затея не из лучших, но долбиться с каким-нибудь плюсами/учить Питон не хочется: все-таки, судя по тому, что я почекал, стажерские/джуновские вакансии на Go в ДС существуют, и их не меньше, чем по другим ЯП, а язык кажется перспективным.
Напиши пару REST API. Гайдов особенно на ангельском языке более чем достаточно, gin поковыряй.
А так тебе правильно порекомендовали по поводу сетевого приложения. Если начнешь его делать познакомишься с авторизацией (JWT, как пример), БД (изучишь GORM) и так далее.
Плакать что материалов нет --- глупо, т.к. их более чем достаточно. На крайняк в гугле забей "Top pet projects Golang"
везде нужно знать дохрена - пару-тройку баз данных (sql, nosql, cache), очереди, куб, паттерны микросервисной архитектуры
если вкатываешься, то имеет смысл идти в жаву, питочик или жээсину - там монолиты и реально можно постепенно развиваться
Вообще в первую очередь на русском искал, и может я, конечно, поисковиком не умею пользоваться, но условных лекций (как и литературы), где прям с самых основ рассказывают про какой-нибудь HTTP, а потом начинают, разжевывая, что-то писать серверное именно на Go не нашел.
Про REST API - спасибо, ознакомлюсь. Еще вопрос: с >>165418 (OP)
>- Емкий пошаговый гайд с азов до джуна (go tour на максималках): https://www.practical-go-lessons.com/ стоит ознакомиться? Там про HTTP, XML, JSON что-то есть, выглядит как то, что может пригодиться.
Ой, кусок вопроса в цитату влез, но надеюсь ясно, о чем я спрашивал
Двачую вопрос, я тоже хочу вкатиться в Go, но не обязательно сразу бэк писать. Что на нём ещё можно написать в качестве первого проекта?
Ладно.
>стажерские/джуновские вакансии на Go в ДС существуют, и их не меньше, чем по другим ЯП, а язык кажется перспективным
Не, сильно меньше. Как минимум тот же яндекс нанимает кучу С++/Java стажеров. Сбер, тиньк, рсхб устраивают java/js стажировки для студентов. Не говоря уже о всяких галерах и интеграторах, которым нужны джуны и стажеры, которые будут разгребать самые помойные нудные таски, за которые никто не хочет браться.
Из известного мне, гошников к себе на стажировку берет вайлдбериз, озон (правда у них обязательно 40 часов в неделю работать) и яндекс (в очень малых количествах). А, ну еще и авито, правда хз набирают ли они стажеров, плюс там были довольно кабальные условия уровня работать год за 40к.
это другое
весь крупняк набирает стажеров/джунов, но туда серьезный отбор - только для крутых студентов/выпускников
с улицы туда не зайти
у меня племянник прошел отборы в тинькофскую школу финтех, рассказывал о задачах по математике и алгоритмам, прошел у них курс по го и сейчас вышел к ним джуном
Есть такое, чтобы попасть в тинькофф нужно уметь решать довольно нетривиальные задачи на динамическое программирование и графы. Да и в целом тинек сейчас позиционирует себя как банк-фаанг и зазывают всяких математиков-олимпиадников. Но там и стажировки раз в квартал стартуют, правда я за 6 попыток так и не смог даже до собеседования дойти, лол.
А вообще кроме как крупняк сейчас мало кто может содержать джунов и стажеров. Это считай как бесполезного сотрудника содержать у себя в течение полгода.
https://vk.com/topic-123851409_48300564
Вот их задачи и решения, если что. Чтобы получить возможность пройти собеседования, нужно решить 4 задачи и желательно пятую частично.
>>255532
Попробуй вкатиться в wildberries, контора все-таки более паршивая, может хоть туда конкурс поменьше будет.
А так, если ты лоускилльный вкатун, ну то есть не умеешь решать сложные медиумы или харды с литкода (ДП, графы, жадные алгоритмы, всякие рабины-карпы и бойеры-муры для строк, какой-нибудь хитрый бинпоиск) за относительно короткое время, то сейчас только во всякие НИИ, заводы и госы нужно вкатываться, потому что в ДС, не задротя алгоритмы со школьных лет, ты только пососешь в крупных компаниях.
> Вообще в первую очередь на русском искал
Ну тогда твой путь это 1-ass, либо быть вечным мидлом, даже с огромным опытом
Для написания операторов или других приблуд для кубера - определенно да, но это уже больше ответственность девопсов.
А для обычного бекенда это скорее "будет плюсом" и мало где реально нужно
>мало где реально нужно
почти везде сами разраыбы пишут кубо-конфиги
нужно понимать, как работает куб, как писать деплойменты-стейтфул-сеты-сервисы-ингрес
А так везде, на любую стажерскую и джунскую вакансию за неделю прилетает по 300-600 откликов. Как ты будешь отсеивать кандидатов? Понятно, что всякие тестовые дают, контесты, а после еще собеседования по алгоритмам и кишочкам языка, но тем не менее.
Кстати, на хх сейчас примерно 15 вакансий джунов на голанг, попробуй еще вкатиться хоть куда-нибудь. Я вот весной прошлого года пытался вкатиться - так и не вкатился, вакансии, на которых мое резюме не отклонили, закончились быстрее, чем я смог получить хотя бы один оффер, вот и все.
https://hh.ru/search/vacancy?area=1&fromSearchLine=true&text=Golang+junior
Короткий ответ - нет, там более низкоуровневая unsafe-машинерия
Рефлексия в го инкапсулирована в отдельный пакет, который рантайм го напрямую не импортирует. Вообще компилятор и рантайм почти не используют общедоступные пакеты, вместо этого они используют параллельные имплиементации из internal пакетов. Я так понимаю это из-за 1.х promise of compatibility, который связывает по рукам и ногам
Встречный вопрос - а какая, в общем-то разница? Если ты упрешься в производительность type switch или type assertion тебе вообще и от интерфейсов нужно будет отказаться.
Вопрос, мягко говоря, странный. И то и другое - сущности уровня языка и используют одни и те же механизмы.
Если тебя беспокоит производительность - пиши бенчмарки
type switch по по производительности почти не отличается от обычного свича
Многие хоть и не пишут этого, но готовы рассмотреть и с опытом на других языках.
Ну и как ты это себе представляешь, писать в резюме "я на го только хелловорлды борду и интернет магазин писал, опыта нет, зато я мидл в языке x"? Так такое резюме на этапе хрюши в помойку отправится.
> Ну и как ты это себе представляешь, писать в резюме "я на го только хелловорлды борду и интернет магазин писал, опыта нет, зато я мидл в языке x"?
Да.
> Так такое резюме на этапе хрюши в помойку отправится.
Нет.
Друг, я тебе, возможно, тайну открою, но джуна от миддла отличают не то, как они задрочили подводные камни конкретного языка, а опыт и знание подходов непосредственно к разработке ПО.
Озон вроде бы раньше нанимал на Го людей из других стеков технологий без требований глубокого знания го.
>>257547
>а хрюши понимают
Ну даже если не понимают, какая от этого разница? Ты с пыхи перекатываешься или откуда? Если с пыхи или питона, то можно поискать вакансии, где требуют PHP/Golang или Python/Golang. Могут на такое взять и без коммерческого опыта в Go. Правда не факт, что на работе ты будешь разрабатывать модные молодежные микросервисы, могут заставить ковыряться вилкой в помойном легаси на пыхе.
> я просто хотел разобраться в кишочках гоуленга...
На эту тему не много контента, лучший выбор это сколнировать репу голенга и читать код рантайма. https://go.dev/src/runtime/iface.go
Но для начала хватит понимания что вообще такое интерфейсное значение (структура с двумя поинтерами, один из которых на рантайм-данные о типе, которые как оказалась (см комментарий на скриншоте) - в нормальных условиях является синглтоном), чтобы понимать, что проверка конкретного типа у интерфейсного значения это относительно не дорогая операция (сравнение двух адресов, т.е. сравнение двух чисел)
тупо иди на собес в авито/вб/озон. если сольют, то проси фидбек. большой шанс, что если тебя сольют, то это будет не из-за хуевого знания гошки/микросервисов. я на похуй без опыта вкатился через стажерство в вайлдбериз, прошел только tour of go до собеса. в резюмехе были базовые знания петона, плюсов, sql и инженерная специальность по радиолокации. на своём опыте вообще не почувствовал никакую трудность вката, о которой тут пишут.
потом эти ягодные пидары сократили, но в другую контору перейти с повышением ЗП уже было максимально просто. всю эту хуйню вроде взаимодействия с серверами и как писать рест апишки за первый месяц выучишь на 95%.
давай кулстори. кто это?
И, вообще, как такие проблемы в нормальной команде надо решать?
Пример данных в базе на картинке. Произошло какое-то несоответсвие выдачи. Некто Кульпин отослал решать проблему в группе, которая пишет бэк.
Виноват Кульпин?
В каком году это было? Сейчас вб при подаче к ним на стажку просит вертеть деревья и решать задачи уровня яндекса на собесах.
Чабинский Паша из вб, не знал что-ли? По какой причине произошел такой диалог, не в курсе, но на дваче и не только это еще год назад обсуждали.
https://www.highload.ru/moscow/2018/authors/1728
https://s30132103300.mirtesen.ru/blog/43718606268/-YA-vas-v-krug-postavlyu-Kak-v-Wildberries-obschayutsya-s-podchi
https://joker.ykt.ru/2021/01/18/kak-v-wildberries-obschayutsya-s-podchinennymi.html
>но в другую контору перейти с повышением ЗП уже было максимально просто
В РФ есть нормальные места, где пишут на го, за исключением авито/вб/озона? Нормальные - без кучи легаси, с нормальным руководством и без толп вкатунов с заводов на позициях сеньоров.
Есть
Дело не в производительности, просто вопрос странный сам по себе. Это примерно как спросить "пистолет Макарова под капотом АК-47 использует"?
Рефлексия - это такой удобный способ использования unsafe'а, когда вместо сигфолта ты получаешь паники.
Приведение к конкретному типу это вообще про другое, хотя и использует под капотом unsafe, как и почти всё в рантайме
Так вот, если tinygo ради многопоточности вставляет в каждую строчку await, это все ебово проседает по сравнению с простейшим кодом на обычном ардунском си?
там стандартные llvm корутины
простейший код на си всегда будет быстрее
перфоманс на уровне плюсов, там теже таргеты, что и у llvm - только достаточно перфомные микроконтроллеры, так что ничего все будет норм.
Дело в том что я еще не знаю что такое стандартные горутины.
Мне нужно оценить перспективу в это ввязываться.
Действительно ли после каждого оператора происходит неявный вызов кода?
Хотел попробовать обрабочик звука сделать.
выхода у меня два:
писать на micropython с кусками кода на C
Go, где интерфейсы с железяками плохо доделаны, но я могу рассчитывать, что производительность как Си потянет мое DSP.
При этом мне просто не нравится Си и все эти исторически сложившиеся таймеры в ембедеде.
Хороша ли идея использовать tinygo ?
Но ведь горутины с точки зрения разработки практически ничем от отличаются тредов - те же рейсы, те же дедлоки. Их отличие от обычных тредов больше в производительности, т.к. они являются абстракцией над тредпулом они получаются более легковесными, вот и всё.
Отличительная особенность го это именно каналы как встроенный в язык тип => имеем дефакто стандартный способ общения горутин
нет, что микропитон, что тиниго подходят только для энтузиастов "поиграться"
хочешь нормально - пиши на с
хочешь поиграться - бери тиниго, о производительности не парься.
моему дружку нравится, бухают по пятницам в офисе, подробнее хз
Я думал всегда, что механизм какого-нибудь epoll в этом плане более производительный и удобный.
Я так понял, что блокирующий IO вызов в горутине просто отдается в netpoller, где как раз с помощью epoll/kqueue отслеживается состояние IO задачи. А в это время на поток, где ранее была горутина с блокирующим вызовом, помещается другая горутина. В целом умно, хуле скажешь.
Другое дело, что если блокирующую задачу нельзя с помощью epoll/kqueue отслеживать, то пизда всему сущему - системный тред заблокируется, и с этим, похоже, что ничего не поделаешь.
Тогда другой вопрос. Вот эти все обращения к БД, они же через сокеты идут, а значит их можно в netpoll отдать и системный поток не будет блокироваться в ожидании результатов какого-нибудь селект запроса?
угу, все так
только хз, что происходит при синхронном сисколе. щас загуглил - все так, как ты пишешь, поток будет ждать.
но память говорит, что мне попадалась инфа, что рантайм должен бы создать новый поток... может кто ссылками поможет.
>Тогда другой вопрос. Вот эти все обращения к БД, они же через сокеты идут, а значит их можно в netpoll отдать и системный поток не будет блокироваться в ожидании результатов какого-нибудь селект запроса?
в целом, зависит от драйвера
но в подавляющем количестве случаев драйверы асинхронные, и блокировки не будет
кстати, я чуть позже все-таки нашел как оно работает
сначала делается сискол из основного потока - в надежде, что он будет достаточно быстрым
за всеми сисколами следит отдельный тред
если он снова пришел проверить поток, а тот еще заблокирован сисколом, то горутина паркуется в отдельный поток
а поток выполнения продолжает работать со своими горутинками
как-то оно так работает
>- Емкий пошаговый гайд с азов до джуна (go tour на максималках): https://www.practical-go-lessons.com/
ого, это что такое? говно какое-то или норм тема? насколько утверждение про джуна - фантазии ОПа-хуя?
мне не для вката, а так, чисто просто интересно
мимо
>пункт "Learning Go"
Нет такого пункта. Вопрос, какая должна быть структура каталогов где писать код? Левые стайлгайды говорят, что нужно создать 10+ каталогов, в том числе cmd для бинарников, хотя для них автоматические создается каталог bin.
нормальные места для гошки - вотвася, нигде дикого легаси еще написать на нем не умели
либо на забугор, на митера джона
остальные конторы - говно
Пасиба!
Автодополнение придумали не от хорошей жизни.
>В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском)
Нетути на русском
что с ебалом, хкйтеры?
эксепшоны не нужны
нужны option и result типы + немного синтаксического сахара поверх
и будет вообще красота
Перекати.
И errdefer, как в zig
Давайте посмотрим кто из местных сеньюров сможет пройти собес на вкатухскую вакуху джуна говнолэнщика.
1. Чем отличается аутентификация и авторизация?
2. Какие есть модели контроля уровня доступа?
3. Дай определение и область применения SAML. Какие преимущества, недостатки и альтернативы?
4. Как ты понимаешь термин Non-Repudiation?
5. В чём заключается CAP теорема?
6. Опиши алгоритм работы равт протокола.
7. Зачем нужен кворум в распределёных системах? Какие преимущества и недостатки системы работающей без кворума?
8. Назови функции девопса в команде.
9. Чем отличаются end to end тесты от интеграционных?
10. Назови принципы SOLID.
11. Что такое "пахнущий" код? Опиши несколько примеров такого кода
12. Какие отличия sql от nosql баз данных? Когда стоит применять какие базы?
13. Назови ACID принципы.
14. Чем оптимистик лок отличается от писимистик лока?
15. Что такое мастер-слэйв (ридонли) реплика? Чем она отличается от эктив стэндбай реплики?
16. Опиши как работает хэндшейк в TCP.
17. Что такое nagle algorithm?
18. Как при сканировании отличить закрытый TCP порт от защищёного фаерволом?
19. В чём разница хтпп первой и второй версии?
20. Какие бывают атрибуты у кук?
21. Какой хейдер ставит вебсервер при проксировании запроса?
22. Опиши когда применяют post-mortem, ретроспективу и root cause analysis?
23. Для чего в гите blame, cherry pick и bisect?
24. В чём разница ручного, полуручного и автоматического пайплайна? Когда какой стоит использовать?
25. Чем отличается фабрика от абстрактной фабрики?
Ну и хватит. Кто тут пройдёт собес на джуна?
Давайте посмотрим кто из местных сеньюров сможет пройти собес на вкатухскую вакуху джуна говнолэнщика.
1. Чем отличается аутентификация и авторизация?
2. Какие есть модели контроля уровня доступа?
3. Дай определение и область применения SAML. Какие преимущества, недостатки и альтернативы?
4. Как ты понимаешь термин Non-Repudiation?
5. В чём заключается CAP теорема?
6. Опиши алгоритм работы равт протокола.
7. Зачем нужен кворум в распределёных системах? Какие преимущества и недостатки системы работающей без кворума?
8. Назови функции девопса в команде.
9. Чем отличаются end to end тесты от интеграционных?
10. Назови принципы SOLID.
11. Что такое "пахнущий" код? Опиши несколько примеров такого кода
12. Какие отличия sql от nosql баз данных? Когда стоит применять какие базы?
13. Назови ACID принципы.
14. Чем оптимистик лок отличается от писимистик лока?
15. Что такое мастер-слэйв (ридонли) реплика? Чем она отличается от эктив стэндбай реплики?
16. Опиши как работает хэндшейк в TCP.
17. Что такое nagle algorithm?
18. Как при сканировании отличить закрытый TCP порт от защищёного фаерволом?
19. В чём разница хтпп первой и второй версии?
20. Какие бывают атрибуты у кук?
21. Какой хейдер ставит вебсервер при проксировании запроса?
22. Опиши когда применяют post-mortem, ретроспективу и root cause analysis?
23. Для чего в гите blame, cherry pick и bisect?
24. В чём разница ручного, полуручного и автоматического пайплайна? Когда какой стоит использовать?
25. Чем отличается фабрика от абстрактной фабрики?
Ну и хватит. Кто тут пройдёт собес на джуна?
а в чем сложность? если хотя бы полгодика провел в программировании, то знаешь ответы на большую часть вопросов.
лично я не знаю ответов на
>3. Дай определение и область применения SAML
это что-то на энтерпрайзном, у нас вго такое не любят
> 17. Что такое nagle algorithm?
> 18. Как при сканировании отличить закрытый TCP порт от защищёного фаерволом?
это что-то что обычному программисту не нужно
Там есть инструкция как локально развернуть, там был русек, но очень васянский - с КАРТОЙ вместо map хорошо хоть слайс не перевели как нарезку
Пиздец, и эту фичу даже выключить нельзя.
Лол, после if err != nil у тебя ещё остались вопросы, а не только желание выбросить этот калл и вымыть руки?
Нихуя тебя не понял.
>JSON разбирается
Что это значит? Скинь пример на го плейграунд
> независимо от регистра ключей?
Ключей в json-объекте, го мапе, полях структуры?
> Вам там делать нехуй?
if thingsToDelat == nil {
return nil, errors.New("da, nam norm")
}
Мне надо написать небольшую кроссплатформенную хуйню, показалось, что Go подходящий инструмент. Но уже всё понял.
Что тебе не понятно? Берём любую программу на Go, работающую с JSON вида {"Hui":"pizda"} и страктом Hui. Начинаем ей кормить JSON вида {"Hui":"pizda","HUI":"anus"}. Программа берёт HUI несмотря на регистр и ебётся в anus. As expected?
> Ты даже пщ не осилил, куда тебе до джсона...
В голос
>>269594
Без твоего кода нельзя сказать точно, но ты, скорее всего, проебался на том, что не прочитал документацию по json пакету, где сказано, что чтобы маршалить го структуры в json объекты или анмаршалить наоборот - тебе нужно чтобы все интересующие тебя в этом плане поля были экспортируемыми, т.е. с большой буквы. по тому что пакет рефлексии, который пакет json использует для работы искусственно ограничивает работу с приватными полями. Если очень надо - юзай unsafe
Если у тебя в json объекте ключи с маленькой буквы - тебе нужно использовать специальные struct tags.
Как, например, тут https://go.dev/play/p/-wWcGgp4hbe
Пройди, блядь, ебучий тур по го, он охуенный
https://threedots.tech/series/modern-business-software-in-go/
там много о clean architecture + ddd + как писать на гошке
Ну а вот в этот пример го не может...
>To unmarshal JSON into a struct, Unmarshal matches incoming object keys to the keys used by Marshal (either the struct field name or its tag), preferring an exact match but also accepting a case-insensitive match. By default, object keys which don't have a corresponding struct field are ignored (see Decoder.DisallowUnknownFields for an alternative).
Засим отправляю вас к https://github.com/mailru/easyjson
>буллет пруф продакшон грейд рест эйпиай
в компаниях по-разному. где-то десятки пакетов по 30 строк кода и мемы про чистую архитектуру и DDD, где-то https://medium.com/@matryer/how-i-write-go-http-services-after-seven-years-37c208122831 все роуты в одном пакете и сотни строк в каждом пакете - норм. на джуна в обоих случаях должен пройти, если собеседующие не ебаны. если и ты, и собеседующие не ебаны, то у тебя вообще тестовых заданий быть не должно и в первые недели ты будешь поставлен на колени делать код как в остальных проектах команды. единственное что я блять увидел за 3 места работы это то что все имеют пакет с модельками названный models
И тут го перенимает традиции жавы.
Как думаете, через 10-15 лет станет ли го второй жабой в плане легасе?
Почему именно жабы? Половину языковых тредов перекатывают после 1000 под тем же предлогом.
В дополнение, как вы смирились с ограничением количества слов в названии пакетов до одного? Это же не дает вообще никакого понимания откуда этот пакет, что он делает, может быть вообще это другой пакет, а не который вы ожидаете. И вы это не поймете пока не посмотрите на импорт или на сам пакет.
ты из какого года вылез? два года назад уже всё было когда я устраивался стажером
Не забывай обновлять методичку, ты за это деньги получаешь. С пакетами они разобрались, дженерики уже есть в бета-версии, скоро и эксепшены подвезут.
да сколько можно
эксепшенов не будет, да и они и не нужны
поверх error норм встанут монады
осталось только добавить синтаксического сахара, что бы уйти от if err!= nil
да сколько можно
эксепшенов не будет, да и они и не нужны
поверх error норм встанут монады
осталось только добавить синтаксического сахара, что бы уйти от if err!= nil
> как вы смирились с ограничением количества слов в названии пакетов до одного
Это не ограничение, это скорее рекомендация. На практике там часто 2 и иногда даже 3. Даже в стандартной либе есть по два слова.
Название пакета это название неймспейса, он не должен быть подробным описанием что это такое и для чего.
> Это же не дает вообще никакого понимания откуда этот пакет
Полный путь импорта более чем достаточно для понимания.
если уж нужно, то либо составное слово, либо аббревиатура. но внутри приложения обычно всё понятно. еще в серьезных компаниях автосгенерированный код может и с андерскорами в названии пакетов быть, поэтому в названиях самописных пакетов тоже их используют и не ебут мозги, хоть и неидеоматично. а для публичных либ не должно быть так уж трудно короткие названия придумать. если в твоей либе больше трех пакетов которые нужно импортить, то ты вообще пидор.
>>272106
неиронично одна из лучших фич. делал себе скрипт штобы сишарп в го переписывать так это ебота лишние кейворды приходится стрипать плюс нихуя не понятно какое дополнительное понимание они привносят, кейсинг хотя бы дополнительно виден в точке вызова
Заебись у них тупа на спйте лежит страница с описание в духе
«Метод получитьСписок - возвращает список»,
Примеров ноль, зато блядь поддержу pred exp выключили сука
Нет, в го все еще почти что нет вакансий для джунов или стажеров.
Лучше поработай год-два на пыхе или питоне, а потом в го вкатывайся.
Зачем вообще его использовать?
Пытаюсь вкатиться в ГО, так как хочется больше понимать в работе бекенда и при возможности писать свои костыли.
Возникает куча вопросов, по релокации памяти, пустым интерфейсам, алгоритмам итд итп.
Думаю может есть какие-то репетиторы? менторы? Больно во всем этом разбираться самому. Не представляю как в ГО вкатываются с 0 самостоятельно.
Аноны экс-джависты, можете пояснить почему/зачем вы перекатились на го? Я сам вкатун в пхп и понимаю, что с него придется перекатываться, чтобы начать деньги зарабатывать. Но вам это зачем, чем жаба не устраивала, там же вроде норма платят? Или доебала "корпоративная" культура, или проекты унылые?
>доебала "корпоративная" культура, или проекты унылые
И то, и другое. Ну и легаси конечно же.
Сам подумай, в джаве ты только и делаешь, что годами перекладываешь XML и джейсоны с помощью спринга, попутно разбираясь в крайне унылой бизнес логике предприятия или банка.
В Го ты можешь убедить кабана, что нужно с нуля написать ту или иную фичу без использования фреймворков. В джаве тебя после этого будут считать дебилом, потому что есть спринг и хибернейт, которые умеют все на свете, а в мире го такое вполне прокатывает.
Ну и вообще скилловые джависты уходят в скалу или го обычно, а джава наполняется вкатунами с заводов и бывшими таксистами, уровень коллективов падает ежегодно.
> go
> defer
> chan
> select
> мерзкая параша прямиком из семидесятых
Будь это было так, сейчас бы асинхронный код в большинстве случаев не состоял бы из колбеков и async/await'ов
покормил хейтера
> стоит врываться в Go фанату С++
С такой формулировкой - однозначно нет, не иронично желаю продолжать наслаждаться своим языком.
Правильный вопрос - "я занимаюсь предметной областью х, в ней го вообще применимо?", тут уже можно подискутировать, если подставить разные значения х
>>276619
> Возникает куча вопросов
Это нормально, когда изучаешь что-то новое. Задавай гуглу или итт, если последний вариант - желательно выкладывай примеры своего когда на го плейграунд
> Больно во всем этом разбираться самому. Не представляю как в ГО вкатываются с 0 самостоятельно.
Ты еще в раст/плюсы не пытался вкатываться, вот там вообще пиздец. А го один из самых простых языков с точки зрения вката.
> по релокации памяти
Не лезь в кишки без лишней необходимости. Помни про правило 20/80
> пустым интерфейсам
Сейчас уже модно писать any, т.к. это буквально что угодно
> Думаю может есть какие-то репетиторы? менторы?
У меня всегда были сомнения в квалификации людей, которые вместо того чтобы зарабатывать килобаксы в разработке занимаются преподаванием за мелкий прайс. Единственный плюс - в универе можно поёбывать студенток
Но ИТТ все твои друзья, поможем чем сможем.
Я изучаю Го как девопс, но запутался совершенно.
Написал простую программу с sql и gorilla/mux :
package main
*db.SQL
..
{
db, err := sql.Open("postgres", connStr)
err = db.Ping() //и все это работает
}
А в другом файле и том же package main я обрабатываю запросики:
err := db.Ping()
и db == nil !
БЛЯДЬ
что вообще тут в Go происходит?
Я прямо охуеваю с этого. Что можно сделать не так в таком простом примере?
Это все по хаутушкам делаю, за исключением небольших своих добавлений.
Из отличий от примитивных программ из инета у меня просто на разные файлы разбито и gorilla/mux .
Думаю, я какую-то детскую ошибку совершил. Может кто угадает какую?
Я изучаю Го как девопс, но запутался совершенно.
Написал простую программу с sql и gorilla/mux :
package main
*db.SQL
..
{
db, err := sql.Open("postgres", connStr)
err = db.Ping() //и все это работает
}
А в другом файле и том же package main я обрабатываю запросики:
err := db.Ping()
и db == nil !
БЛЯДЬ
что вообще тут в Go происходит?
Я прямо охуеваю с этого. Что можно сделать не так в таком простом примере?
Это все по хаутушкам делаю, за исключением небольших своих добавлений.
Из отличий от примитивных программ из инета у меня просто на разные файлы разбито и gorilla/mux .
Думаю, я какую-то детскую ошибку совершил. Может кто угадает какую?
> Думаю, я какую-то детскую ошибку совершил
Да, скорее всего так и есть. В хендлере db это глобальная переменная, так ведь?
>{
>db, err := sql.Open("postgres", connStr)
>err = db.Ping() //и все это работает
>}
Тут ты создаешь локальную переменную db, область видимости которой ограничена фигурными скобками, не важно при этом это просто блок из фигурных скобок или функция. Создав локальную переменную с именем db ты теряешь возможность обратиться к глобальной переменной db. Подробнее разжевано тут:
https://golang-blog.blogspot.com/2020/05/shadowed-variables-in-golang.html
>>db, err := sql.Open("postgres", connStr)
да, ты прав. я тупанул.
А разве компилятор не должен быть обнаружить затенение?
Ужасный язык.
Затенение это легально, и иногда нужно. Поэтому ошибки нет
Чел, ты собрался работать в помойном озоне и wb у торгашей?
Сейчас вся топовая работа на голанге - это блокчейн...
С нуля туда и не вкатываются, переходят с других ЯПов обычно. Предлагаю тебе сначала базовый Си изучить.
Я не писал на джаве, по этому мне сложно сравнивать.
> можно писать свои кривые велосипеды, так как в гоуленге не принято пользоваться фреймворками
Ты так говоришь, словно в го вместо веб-сервера голый TCP-сокет и вокруг него нужно написать свой веб-сервер.
Или что каждый день гоферы сидят и свои велосипедные недо-фреймворки пишут под каждый проект.
Я на го работал на 2-х проектах, и в каждом была запилена очень тонкая абстракция над стандартным http + внешним роутером, и больше никто ничего не дополнял годами.
Я только однажды добавил сервить embedded files
А большую часть времени что так, что эдак - ты всё равно пилишь бизнес-логику.
А то что в го не принято использовать фреймворки значит приблизительно тоже самое, что и когда говорят что react.js это не фреймворк - что мы вместо одной жирной зависимости которая умеет вообще всё импортируем десяток узкоспециализированных зависимостей по необходимости. DI отдельно, генерация документации отдильно, ORM/драйверы бд - отдельно.
Ваше мнение об ЭТОМ? Индуска нагло зарабатывает на еду, впаривая базу под видом курса? или годный контент?
Видеоконтент это в 99% случаев хуита для слабоумных, по тому что нет других причин смотреть 30 минут видео вместо того, чтобы прочитать этот материал тестом минут за 7-10
Ну так текстом слишком сухо для слабоумных, а тут подача и итеративный пример. Хотя в целом согласен.
> На чем быстрее будет работать круд с рест апи и почему - на го или на пхп? Догадываюсь, что на го.
Если это действительно круд, Go будет незначительно быстрее.
> И ещё - его же можно будет просто на сокет повесить через tcp порт? И будет ли при этом какой-то выигрыш у http?
Это как? Невозможно, конечно. Рест гвоздями прибит к http, который работает поверх tcp.
Смотря что ты поднимаешь под CRUD.
Если то что ты обычно пишешь на php - нет.
Правильный бекенд на Go делает какую-то логику : проверяет права, отдает "глобальные" данные , накапливает и откладывает обновления в базу.
В этом случае, конечно на Go быстрее даже для мелкого бизнеса.
> Это как? Невозможно, конечно. Рест гвоздями прибит к http, который работает поверх tcp.
Точно, забыл про это. Ну а если не именно rest юзать, а что-то другое? Типа какой-нибудь бинарный протокол юзануть или тот же grpc?
Задача простейшая, уровня "принять джысон - отдать джысон", прочитать/записать данные из базы. Авторизация будет через OAuth. Желательно прикрутить сваггер.
>>279887
> Смотря что ты поднимаешь под CRUD.
Описал выше.
> Если то что ты обычно пишешь на php - нет.
Блин, откуда столько пафоса, пчел? Откуда ты знаешь, что я там обычно пишу на пхп?
Понятно, что бинарник будет быстрее интерпретируемого япа, я пытаюсь понять, на сколько конкретно, скорей всего сделаю два варианта и напишу какую-нибудь тестилку, которая будет бомбить запросами и сравню.
> type customError uint
что конкретно делает? Создает алиас для uint но с кастомным именем, правильно понимаю?
Типа, uint(i) == customError(i)?
Нет, то что ты описал делает конструкция
> type customError = uint
А твоя же конструкция создает отдельный тип, который основан на базовом типе uint, но уже имеют другой набор методов, по этому имлементит другой набор интерфейсов.
Спасибо. А что значит "основан на базовом типе"? При инициализации переменной принимает значения этого типа?
> я пытаюсь понять, на сколько конкретно
Если тебе действительно важно увидеть конкретные цифры на конкретном железе в конкретном окружении - тебе только бенчмарк поможет.
Если же речь "на сколько оно будет быстрее? Так, примерно, можешь почувствовать?" - в теории у тебя 99.98% времени будет занимать работа с сетью и диском и разницу ты почувствуешь только на очень большом скейле.
Спасибо!
Ну да, я же и собираюсь сделать бенчмарк.
Какой скейл считается очень большим? 1-10 миллионов записей за раз?
И ещё я понял, что существует очень большой выбор веб-фреймворков и прочего, сейчас выписываю в отдельный файлик все эти проекты.
Вот уже какой список:
https://github.com/labstack/echo
https://github.com/gin-gonic/gin
https://github.com/gofiber/fiber
Ну и net/http, конечно.
Классика для го это net/http + gorilla mux, это сочетание отражает производительность усредненного бекенда на го.
Но максимальную производительность ты выжмешь только на https://github.com/valyala/fasthttp + нестандартные json либы, которые не используют рефлексию
> Какой скейл считается очень большим? 1-10 миллионов записей за раз?
Тут зависит от железа же. Я бы в твоем случае арендовал за 5-15$ виртуалку и посмотрел сколько максимум реквестов в секунду можно выжать на этом железе при около-нулевом количестве 500-х ответов.
Потом можно будет еще с настройками ОС поиграться, если еще желание останется.
>Блин, откуда столько пафоса, пчел? Откуда ты знаешь, что я там обычно пишу на пхп?
Может быть потому что я писал и на php и на go ?
потому что ты не мог написать код на php использующий глобальную инициализацию и разделяемые между запросами переменные(я хз как они там это называют, но сейчас активно движутся в этом направлении).
Если бы мог, то ничего бы не спрашивал.
Главное отличие всех бекэнд-решений не на php - глобальная инициализация и достигаемое этим качественно иная производительность. Это почти всегда лучше php.
Что скрывает Google?
Что известно об их способе использования Go?
что произошло с библиотекой tensorflow ? Почему ее для Go больше не поддерживают? В книжках еще можно найти примеры использования, но сейчас как будто все закрылось.
Каков современный способ доведения до продашкшона ML-приложений по обработке каких-нибудь картиночек? Неужели в питон через веб-апи пихают?
а накуя? это не го вей
net/http более чем достаточно для всего
для чуть большего удобства есть фреймворки - тонкие надсстройки на роутером
усё
остальное от лукавого
(ну ладно, в некоторых обстоятельства net/http можно заменить на fasthttp - чувак невероятно крутую работу проделал)
вопрос не в том, что есть "го-вей".
вопрос, ПОЧЕМУ так сложилось? Какие идеи у Пайка с его бандой? Что ожидать в будущем?
В конечном счете, вопрос, стоит ли МНЕ изучать Go, но на этот вопрос никто из вас не даст ответа. Поэтому нужно понять откуда это все пришло и куда придет.
идея в том, что все должно быть просто, понятно, быстро и без магии
точка
за это опытные программисты и любят гошку
> Может быть потому что я писал и на php и на go ?
> потому что ты не мог написать код на php использующий глобальную инициализацию и разделяемые между запросами переменные(я хз как они там это называют, но сейчас активно движутся в этом направлении).
На пыхе есть асинхронные фреймворки, Swoole, ReactPHP и ещё там что-то.
> глобальная инициализация
Что ты под этим понимаешь? Давай поподробнее.
типичная ситуаци>>281008
>На пыхе есть асинхронные фреймворки, Swoole, ReactPHP и ещё там что-то.
И их никто не использует. Нет культуры написания непрерывно работающих приложений.
>> глобальная инициализация
>Что ты под этим понимаешь? Давай поподробнее.
Смотрю, ты настоящий пхпшник.
По этим я понимаю все варианты переиспользования результатов работы любого кода. Глобальные переменные хранящие все что угодно - кеш курс доллара, права админа, токены-хуекины, словарь спам-слов.
> И их никто не использует. Нет культуры написания непрерывно работающих приложений.
Это да, согласен.
> >> глобальная инициализация
> >Что ты под этим понимаешь? Давай поподробнее.
> Смотрю, ты настоящий пхпшник.
> По этим я понимаю все варианты переиспользования результатов работы любого кода. Глобальные переменные хранящие все что угодно - кеш курс доллара, права админа, токены-хуекины, словарь спам-слов.
А тут какой-то бред пошёл. $GLOBALS тебе на что?
Кеш обычно в редисе держат.
Что ты там разрабатывал-то на пыхе, персональные хоумпаги?
Потому что проще и легче использовать несколько мелких библиотек, чем один огромный помойный легасный фреймворк по типу asp.net или spring.
Спасибо, буду учить.
Ох, не хочу продолжать дискутировать с пришибленным пхп человеком.
Просто изучи как тут все работает, а потом поймешь почему так быстро.
Вопрос лишь в том, готов ли ты и твой кабанчик эту эффективность оплачивать.
Пафосный тон просто необходим чтобы ты осознал насколько все хуево.
но ведь если все используют один и тот же фреймворк, то ты просто можешь нанимать программистов с улицы. или перекидывать между проектами не тратя время на адаптацию ( как в Google) .
(((Они)) что-то скрывают.
Собираюсь перекладывать данные из 1 сервиса в другой. Первый сервис это Opensearch (elasticsearch) отдающий документы в json'ах.
У программы (перекладывателя) будет файловый конфиг, в котором я напишу как и в какие индексы opensearch сходить и какие поля документов мне интересны.
Проблема в том, что я не могу в момент конпеляции задать статически типы структур интересующих меня полей документов, чтобы натянуть на них получаемые по http json'ы, потому что в момент момент конпеляции они еще не известны. И станут известны только в момент выполнения, чтения конфига.
В какую сторону копать?
Ты перекурил, по ходу, заговоры мерещатся. Тебе же уже сказали, что в го должно быть везде всё просто.
Я вот в сторону echo сильно посмотриваю, как вкатун. Очень уж сильно просто там всё. Есть подводные?
а что вы так паритесь с фреймворками? в любом приложении, слой роутинга и контроллеров - самый тонкий, который подменить - раз плюнуть
лично мне fiber нравится
Почему я не могу делать foo.Execute(MoveLeft{}), но могу foo.Execute(&MoveLeft{}), если в сигнатуре метода объявлено, что получаем параметр не по ссылке?
> Что известно об их способе использования Go?
Монорепы на десятки гб, гора кодогенерации и тестов
Общение между сервисами по grpc
> Каков современный способ доведения до продашкшона ML-приложений по обработке каких-нибудь картиночек?
https://youtu.be/Ib934FGLsCU
https://youtu.be/-fXQN2cbhF8
Если тебе буквально нужно переложить json - то тебе и парсить его не нужно, можно просто слайс байт прочитать и передать его в другое место, или даже io.Copy сделать, если возможно. А так да, либо мапа с пустыми интерфесами, либо с https://pkg.go.dev/encoding/json#RawMessage, если нужно какое-кто конкретное значение вытащить.
Ну в пыхе например фреймворк - это альфа и омега, всё предоставляет, от ORM до тестов. Широко распространены "макаки одного фреймворка", которые даже не представляют, что можно что-то без фреймворка делать, клепают бесконечные "сайты с админкой на ларавеле", ИЧСХ, даже деньги этим зарабатывают.
Так это даже не пхп разработчики, а что-то уровня ларавель- или даже вордпресс-девелоперы. Теперь понятно почему у них горит от го - быть чисто "net/http" девелопером ну уж совсем зашквар какой-то
Сайты с админкой на одном фреймворке клепают для жадных кабанов с простыми требованиями, потому что зачем придумывать что-то сложнее, если никакой сложной логики или хайлоада не будет. Для нормальной макаки не составит никакой сложности переключиться в той же пыхе с ларавеля на голый роутер + http из симфони и взять doctrine вместо богомерзкого eloquent.
Заебись тут ИМПЕДАНС. Поля комментировать можно, а таблицу нет?
Интернет весь перерыл
https://go.dev/doc/tutorial/call-module-code
(Да, мне непривычно размещать проект на гитхабе я че-то не врубаюсь как тут у вас принято, но туториал не выглядит плохим )
Все заработало, я могу сделать и go build и go run .
Но что все не нравится vscode ? Решительно невозможно так работать!
Как укротить vscode ?
Что у тебя в go.mod написано? У тебя пути к проектным пакетам должны начинаться с того, что у тебя в "module" написано.
Ты следующий ОП и обязан перекатить тред.
в точности то, что в этой ебнутой ссылке, которую я нагуглил.
в go.mod написано : replace example.com/greetings => ../greetings
в общем, я перетасовал файлы и завелось. а с vscode что-то не то.
Наверное на галере с него это говно требуют.
Можно было бы в массив массивов запихнуть правила замены, и по ним в цикле пройтись с реплейсом, но это если правил много, а не три.
Понял. Выглядит как говнокод конечно...
https://go.dev/play/p/-liM2PhUGEE
но всякие цепочки вызовов выглядят как говно
в жыэсах я наелся такого
В данном случае можно воспользоваться https://pkg.go.dev/strings#Replacer, он еще и по аллокациям будет эффективнее
Спасибо. Если честно, дико выглядит сигнатура метода, где правила замены ты последовательно передаешь в фабрику через запятую. Почему бы мапой не передать?
Питоновских kwargs не завезли, по этому используем *args. А другого сахара у меня для вас нет. А через мапу - так это вообще никакого сахара не будет тогда, куча лишних символов появляется
В Go вообще сахара нет. Могли бы хотя бы эти if err != nil завернуть во что-то приличное.
Сегодня ты обрабатываешь ошибки через try/catch, а завтра родину продашь.
ПЕРЕКАТ https://2ch.hk/pr/res/2286748.html (М)
ПЕРЕКАТ https://2ch.hk/pr/res/2286748.html (М)
ПЕРЕКАТ https://2ch.hk/pr/res/2286748.html (М)
Спасибо тебе, добрый человек.
Это копия, сохраненная 7 июля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.