Alexander
ты же не работаешь со фреймами, когда обычное tcp соединение юзаешь
David
Подскажите пожалуйста, чем отличаются эти два решения? В плане функциональности
David
Rostislav
Подскажите пожалуйста, чем отличаются эти два решения? В плане функциональности
на первый взгляд ничем. Второе накручено больше только. ну и log.Fatal делать плохо
David
буду знать, спасибо
David
а как не плохо?)
Rostislav
а как не плохо?)
ну варианты разные есть. Этот плох тем, что при ошибке в одном методе падает сразу всё приложение. Да еще и падает через фатал, у него внутри log.Print и os.Exit(1) - даже деферы не отработают.
David
а, все, я тебя понял
David
да
David
спс
Alexey
ни у кого, случайно, нет задач с route256, который сегодня кончился?
Maks
Че вам этот роут
Maks
Заходишь на кодварс или литкод
Maks
Решаешь там задачи и всё
Maks
Потом смотришь чужие решения и разбираешь
Maks
Единственное на литкоде более быстрое решение на самом деле может быть медленнее
Maks
Просто из за плавающей скорости выполнения там бывает вакханалия
Alexey
Там просто прикольные задачки были. А я видел только 2,3 и последнюю, на остальные даже не смотрел
Alexey
✏️ Потоковая обработка на go1.18 В версии 1.18 языка Go появились генерики, дающие возможность писать обобщенный код, то есть код, не зависящий от конкретного типа данных. Например можно написать код, обрабатывающий потоки данных - применить к ним одну и ту же функцию, отфильтровать, просуммировать и т.д., не завязываясь на конкретные типы данных. Так как я вижу потенциал в парадигме поточной обработки с помощью итераторов/стримов и теперь есть возможность реализовать ее в Go, я решил сделать это. Эта идея появилась у меня после данной публикации. В ней рассказывается о библиотеке для языка Go для обработки данных с использованием генериков. Я попробовал эту библиотеку в своем проекте и столкнулся с следующими недостатками: настойчивое использование IO[A], который по сути представляет собой func()(A,error) то есть любую функцию, которая может вернуть ошибку. При написании кода это создает неудобства, потому что нужно всё заворачивать в этот IO и код превращается в жонглирование io.Map и io.FlatMap. Видимо это вдохновлено библиотеками с чисто функциональным подходом. Сделано это было, чтобы была функциональная чистота, что в итоге не очень (как по мне) ложится на процедурность языка Go. Stream[A] это обертка над стейт-машиной. Стейт-машина в данном случае это структура, в которой либо ничего нет (конец потока), либо значение и продолжение (следующее состояние) машины. В итоге это создает две проблемы. Первая: чтобы создать стрим, нужно создать его продолжение, продолжение продолжения и тд. Единственный адекватный способ этим пользоваться, который я нашел - это рекурсия. Вкупе с отсутствием Tail call optimization это приводит к второй проблеме. Работа с стримами переполняет стек. Модель потока как стейт-машины была построена так, что переход к новому состоянию - вызов функции. Поэтому, чтобы обойти стрим целиком, надо уйти в рекурсию на глубину, равную длине потока. Построение типа Either[A,B]. По моему скромному мнению, это вообще тип, которого не хватает в Go и который разумно реализован в языке Rust. В библиотеке этот тип это структура, содержащая и элемент типа A и элемент типа B . Плюс булевое поле как способ идентификации какой из полей действителен на самом деле. Важно то, что по сути тип Either[A,B], семантика которого элемент типа A ИЛИ B, представляется в языке как пара из элемента типа A И элемента типа B. Не совсем очевидный интерфейс. Хотя это скорее я не до конца разобрался, что и почему. Так или иначе, я считаю, что построил интерфейс более простой и прямолинейный, не потеряв в общности. Читать дальше @Golang_google
похоже кто-то хочет затащить фп в го
wagner
кто знает почему go sandbox вырезает import "fmt" при исполнении следующего кода: // You can edit this code! // Click here and start typing. package main import "fmt" type ab struct { value string } func main() { st := ab{} st.value = "hello" fmt.println(st) } в итоге я получаю undefined: fmt
innit?
у тебя println
wagner
у тебя println
а, соре я дурик
wagner
спасибо)
wagner
бывает)
а не знаете, при создании структур переносы не поддерживаются?
wagner
а, прикол)
wagner
спасибо казалось бы, к чему она там
Sergey
спасибо казалось бы, к чему она там
Специально сделано так, что аргумент на отдельной строке должен завершаться запятой, чтобы при добавлении или удалении строки с аргументом не "ломалась" конструкция
wagner
Кто-нибудь знаком с конвертацией данных в pgx? Дана структура HttpProxy (рис.1), на втором рисунке происходит считывание записей из бд и конвертация типов данных в типы структуры На строке 127 (рис.2) происходит panic, потому что go не может конвертировать []interface в []string При всём этом, в бд колонка tags имеет следующий формат (рис.3)
wagner
wagner
wagner
захотел сделать rpc-пул http proxy по системе RoundRobin для использования их в подключениях к сервисам, запрещающих обращения с российских IP на пол пути понял что лучше будет переписать на пхп с кэшем в редисе, но решил закончить и посмотреть что из этого выйдет
xarakiri
http://go-database-sql.org/retrieving.html
Null
Go 1.19 Release Candidate 1 is released https://tip.golang.org/doc/go1.19 https://github.com/golang/go/issues/new/choose https://go.dev/dl/#go1.19rc1 @Golang_google
whois
Друзья, скажите пожалуйста, а зачем вот так делают: x := int(1) y := int32(1) t.Logf("x => %#v type=%T", x, x) // 1 int t.Logf("y => %#v type=%T", y, y) // 1 int32 a := interface{}(x) <————————————————————— КАКОЙ СМЫСЛ В ЭТОМ И ЧТО ЭТО ДАЕТ? b := interface{}(y) t.Logf("a => %#v type=%T", a, a) // 1 int t.Logf("b => %#v type=%T", b, b) // 1 int32
Илья
можно и без него, при передаче в аргумент any это происходит автоматически
whois
можно и без него, при передаче в аргумент any это происходит автоматически
Мне хочется понять, как коррекно называется такая процедура "interface{}(VAR)" И в каких кейсах это может понадобиться!?
Илья
вроде Boxing, преобразование в интерфейс
Null
Golang-дайджест № 18 (1 – 30 июня 2022) Интересное в этом выпуске Выпущены версии 1.18.3 и 1.17.11; Go 1.19 Beta 1 Released; Обнаружен еще один ботнет на GO; Собеседование Часть II что там с конкурентностью? Приятного чтения! Читать дальше @Golang_google
Nikita
Кто нибудь сталкивался с такой ошибкой при создании миграции через Goose? 2022-07-04 10:34:13.533 UTC [80] ERROR: relation "goose_db_version" does not exist at character 36 2022-07-04 10:34:13.533 UTC [80] STATEMENT: SELECT version_id, is_applied from goose_db_version ORDER BY id DESC
Юра (Юрий Александрович)
Я точно не знаю, т.к. с Goose'ом не работал, но могу предположить, что goose_db_version - это служебная таблица, в которой Гузь хранит информацию о мигациях. Возможно, она создается на этапе какой-то инициализации базы, т.к. по умолчанию, естественно такой нет. Т.е., возможно, нужно предварительно провести некую Гузь-инициализацию базы, при которой эта таблица создастся. Возможно, ее нужно создать вручную с какими-то начальным стандартными записями, по которым Гузь поймет, на какой стадии находится база сейчас (на нулевой). *информацию о мигациях - я имею в виду информацию о примененных миграциях.
first
Всем привет. Начал изучать gorm, хочу посмотреть лог выполнения sql запросов к БД, а именно в транзакции. Вызываю метод дебага db.Debug().Transaction(вызов моих методов репозиториев) Но вижу только мои селекты и апдейты. Не могу понять почему не выводит начало транзакции, коммиты, роллбеки, окончание и т.д Эта инфа вообще должна выводиться или какой-то флаг нужно передать? В какую сторону копать? Заранее благодарю за ответы и советы
Patamen
@wdfkdfmekre Не понял
ssss
человек спросил конкретно про то, что ему хочется узнать
ssss
зачем язвить?
first
В сторону голого sql
и как мне голый sql поможет понять про горм и транзакции?
Alexander
если не ответят, советую спросить в issues
first
зачем язвить?
мне кажется, бОльшая часть комьюнити токсики просто)
Alexander
может быть логически это бага даже
Alexander
вообще, если там под капотом вызываются sql.DB.BeginTx() и дальше все такое, то горм не формирует скл код, который куда-то передается и ответа на твой вопрос нет =))
Абылхайыр
и как мне голый sql поможет понять про горм и транзакции?
Насколько я знаю именно с горм такие и проблемы и бывают не все логируется
Абылхайыр
Даже челик 2 месяца назад писал, да и вообще это морока та еще, плюс медленная
Alexander
https://cs.opensource.google/go/go/+/refs/tags/go1.18.3:src/database/sql/sql.go;l=1864 - тут ведь нет нигде строчки скл. все на реализацию в драйвере передается
Alexander
https://cs.opensource.google/go/go/+/refs/tags/go1.18.3:src/database/sql/ctxutil.go;l=104;drc=e822b1e26e20ef1c76672c0b77b0fd8a97a1fe84 - вот это например вызывается. вот копай свой драйвер, ищи это =)
first
Хм, пойду копаться в исходниках. Спасибо большое всем
Emin Zalaev
Я редко тебя вижу тут
Emin Zalaev
Работу что ли нашел
Абылхайыр
Evgeny
а есть какой-нибудь синтаксический сахар для каррирования функций в go? ну типа, у меня есть функция трех аргументов, а я хочу получить два аргумента и вернуть функцию одного аргумента.
Yura
Вопрос: сильно ли критично хранить хранить json массив в поле? Понимаю что нормализация и вся фигня, но у меня есть пара аргументов в сторону того, что в моей ситуации это можно сделать. 1) данное поле будет часто меняться и данные там в большом количестве и не хотелось бы городить кучу запросов для этого 2) база скоро будет переезжать в nosql
Yura
Тут скорее вопрос был о целесообразности данного действия. Пообщавшись с коллегами пришёл к выводу, что лучше не json так как данных будет очень много в любом случае. Всем побольше спасибо
Yura
Ну да, просто коллеги в другом часовом поясе, а узнать хотелось 😅
Dilame
А чего сразу фреймворки юзать ?:) почему стандартной библиотеки не хватит ?
Да может быть и хватит) Я просто совсем только что в go пришёл, мне надо, чтобы кто-нибудь провёл меня по азам
Илья
Да
https://go.dev/play/p/-Xxm-u2Liqc