Кіт ✙
подуть
Dmitry
Омг, работает. Технологии
Polya
А почему заранее не известно? Сторонний апи говно?
Да, там апи не очень, от действий, после получения данных можно определить к какой структуре, поэтому приходит interface, ладно, если стандартным способом нельзя, тогда map будем перебирать
Khalid
разница между reader и scanner?
kostyaBro
Просто мне кажется можно закодить зависимость и использовать нужную структуру
Илья
разница между reader и scanner?
bufio? почитай описание
Polya
Просто мне кажется можно закодить зависимость и использовать нужную структуру
Смысл такой, есть структура сообщения (к примеру Msg) , которая приходит  запросом, у Msg куча свойств проверяем, если проверку проходит, запоминаем Msg, у данной структуры (Msg) также есть свойство Data это interface, когда приходит другой запрос эту Data требуется преобразовать под определенный структуру, то есть проверка Msg так скажем глобальная структура, которая проходит проверку, на другой стороне по моей прихоти не будут менять взаимодействие. Поэтому сейчас склоняюсь просто тупо к перебору map и загон значений в нужную структуру, просто придётся такой костыль делать для всех типов структур, которые могут быть у Data
Polya
А много типов?
Штук наверное 12, по памяти
kostyaBro
Тоесть в первом запросе приходит структура любого типа, а потом, в зависимости от того ято пришло во втором запросе мы понимаем какая структура в первом?
Polya
Тоесть в первом запросе приходит структура любого типа, а потом, в зависимости от того ято пришло во втором запросе мы понимаем какая структура в первом?
Типо такого, только в первом запросе кроме свойства Data (который позже надо преобразовать в структуру) приходят ещё куча чего, так скажем для безопасности
kostyaBro
Просто не понимаю что мешает описать эту логику с не делать свистопляски с мапой?
Andrei
Просто не понимаю что мешает описать эту логику с не делать свистопляски с мапой?
Ну например. Пришел запрос на данные из базы и в зависимости от параметров нужно отдать либо слайс с структурами а или слайс с структурами б либо ц. И вот ты думаешь свич и делаешь ретурн на нужные структуры. Но тебе возвращаться слайс с интерфейсами ибо алгебраических типов в гоу нет и надо привести это все к нормальному типо без интерфейс обертки. Какой самый нормальный путь сделать это?
Юра (Юрий Александрович)
Должен быть не запрос на данные из базы, а несколько разных запросов на конкретные данные из базы.
Юра (Юрий Александрович)
> И вот ты думаешь свич и делаешь ретурн на нужные структуры. Смотрите, у вас на ровном месте возникла мета-задача, причем довольно трудоемкая, плохо отпределенная и плохо тестируемая: сначала нужно в функции вернуть черти что, а потом при каждом обращении к функции нужно будет разбираться, что за черти что она вернула.
Andrei
Должен быть не запрос на данные из базы, а несколько разных запросов на конкретные данные из базы.
Ну в моем случае это чтение имени топика для Кафки. Там все равно нужен свич, чтобы знать какую структуру вернуть. И в конечном итоге это будет в виде пустого интерфейса. Тут при всех мечтах о солиде никак не сепарируешь
Юра (Юрий Александрович)
и по мере того, как будет развиваться функция, и ассортимент того "черти чего", что она может вернуть, будет расти. И нужно будет постоянно лезть в код тех функций, которые вызывают эту функцию, т.к. там начнут офигевать от того, что она возвращает.
Andrei
Неопределенность того, что мы получим создаёт такой эффект. Куда деваться
Илья
или консьюмера, не совсем понял
Юра (Юрий Александрович)
Тогда можно сделать так: 1) функция забирает из кафки содержимое топика в "сыром" формате. Результат передаем в 2) 2) функция детектит тип того, что ей подали на входе. Функции от 3) до n) преобразуют из "сырого" формата в рабочий, но каждая в свой конкретный. В зависимости от того, что вам вернула 2, вызываете нужную функцию (но вызовется она уже из нужного обработчика)
Юра (Юрий Александрович)
т.е. ваш "адаптер к кафке" не должен возвращать одним методом неизвестно что. Он должен получать что угодно, определять тип того, что получил, и по запросу уже конкретного обработчика конкретной структуры конвертировать.
Юра (Юрий Александрович)
(вы ж данные в конкретный формат переводите, чтобы с ними дальше работать, правильно? А не просто, чтобы переслать куда-то в неизменном виде)
Akim
Очень не хватает типобезопасной работы с enum в go без создания инкапсулированной структуры с switch
Akim
есть инфа хотят ли это в go 2.0 завозить?
Akim
Go 2.0 не планируется
Нет, уже идут работы над го 2
Akim
https://ru.wikipedia.org/wiki/Go#Go_2.0
kostyaBro
Wikipedia так себе источник. Там есть ссылка на оригинал?
Akim
да
Roman
Нет, уже идут работы над го 2
Насколько я помню, в какой-то момент решено было отказаться от 2.0, а все изменения делать в рамках текущей реализации
Akim
https://go.dev/blog/go2-here-we-come
Akim
Но каких то современных статей я не нашел
Khalid
bufio.Scanner сканит по строке, да?
Khalid
for Scanner.Scan() { fmt.Println(Scanner.Text()) }
Khalid
for Scanner.Scan() { fmt.Println(Scanner.Text()) }
С каждым Scanner.Scan() сканится одно строка файла, верно?
Khalid
До \n получается
Khalid
да
спасибо!
Илья
спасибо!
Но это по-умолчанию. Можно задать свой через .Split()
Khalid
что свой?
Emin Zalaev
что свой?
Разделитель
kostyaBro
Насколько я помню, в какой-то момент решено было отказаться от 2.0, а все изменения делать в рамках текущей реализации
Ну 2 будет только если не получится поддержать обратную совместимость. Но мы не хотим быть python Generic могли быть go2 но не стали. Покачто все гипотетические изменения которые я прикидывал вполне ложатся на go1
fenogentov
Где можно взять уроки работы с тарантулом для чайников?
fenogentov
Сама книга не зашла, там есть про тарантул?
Илья
Во многих видео объясняют почему он топовый, но не рассказывают как его юзать
Khalid
братья
Khalid
как файл скачать с инета
Khalid
ну через код
Khalid
с гитхаба нужно файл скачать
Khalid
и проводить над ним манипуляции
Khalid
Пасиб
Maks
Или курлом)
Feofan
⭐️ gofer - служащий, который выполняет мелкие поручения (как правило, принести что-либо, подать что-либо) He was just a gofer, but he was hoping to get promoted one day. Он был простым мелким помощником, но он надеялся, что когда-нибудь его повысят. @ieltstoeflcefrr
Юрий
Компания: «ООО Рога и Копыта» Ищем: принеси-подай, главное прод не роняй Вилка: серебряная
Khalid
я получил файл по url, но содержимое файла до красной палки, все что после дичь какая-то
Khalid
package main import ( "fmt" "net/http" "io" "log" ) func main() { res, err := http.Get("https://github.com/semyon-dev/stepik-go/blob/master/work_with_files/task_sep_1/task.data") if err != nil { log.Fatal(err) } body, err := io.ReadAll(res.Body) res.Body.Close() if res.StatusCode > 299 { log.Fatalf("Response failed with status code: %d and\nbody: %s\n", res.StatusCode, body) } if err != nil { log.Fatal(err) } fmt.Printf("%s", body) }
Khalid
в чэм трабл?
Rostislav
в чэм трабл?
в том, что по url лежит html документ и ты его и видишь на скрине своем
Khalid
дэмн, а как только текст получить
Rostislav
парсить
Khalid
онет...
Rostislav
например удалить все после </td>
Khalid
например удалить все после </td>
а, звучит не так сложно как название
Rostislav
смотри методы пакеты strings
Khalid
пасиб
Rostislav
хотя мб чет встроенное есть в го, чтобы html жевать. Но я хз. Может кто другой подскажет
Vladislav
есть https://pkg.go.dev/golang.org/x/net/html
Vladislav
но неясно, обработает ли он правильной какой-нить некорректный html, который браузер жуёт норм, а парсер на нём сломается