Andrei 🦉
и? разговор то про предаваемые в браузер файлы
не совсем, прочитайте дальше трех сообщений при попытке присоединится к разговору
Daniel
коллеги, о чем вы тут?
Andrei 🦉
коллеги, о чем вы тут?
если вкратце, одна сторона кричит об очередной серебрянной пуле в виде http/2, а другая пытается отбрехатся, что http/2 по факту мало кому действительно нужен
Andrei 🦉
ну а как бы что вы пытались доказать все это время? что бинарный протокол быстрее текстового? да он быстрее
Andrei 🦉
но не настолько быстрее, чтобы все резко бросились его использовать, плюс как я писал выше, http/2 дико деградирует при плохом соединении, а это 90% бизнес кейсов
Roman
а в https типа не так, да? )
Roman
откуда тезис про 10 хендшейков?
Roman
4.002s - HTTP2 is 14% faster than HTTP 4.164s - HTTP2 is 17% faster than HTTPS
Anton
всем 👋 подскажите, пожалуйста, в каком направлении думать. нужно запилить поддержку мультиязычности в rest api, т.е. например некоторые строковые поля у структур превратить в набор переводов на разные языки. соответственно админам показывать все переводы, а клиентам только нужный. пока додумался до чего-то такого: type TranslatedString struct { Ru string `json:"ru,omitempty"` En string `json:"en,omitempty"` De string `json:"de,omitempty"` Fr string `json:"fr,omitempty"` } type Thing struct { ID *uuid.UUID `json:"id,omitempty"` Name TranslatedString `json:"name,omitempty"` Description TranslatedString `json:"description,omitempty"` } type ThingView struct { Thing Name string `json:"name,omitempty"` Description string `json:"description,omitempty"` } но тут ещё не очень понятно, как, во-первых, это потом в SQL хранить, разве что поля с префиксом, вроде name_ru, name_en, и во-вторых, нужно будет каждой структуре ...View ручками добавлять методы типа Translate(lang string) и наполять эти переопределённые поля нужными строками, например: // допустим у TranslatedString есть метод Translate(lang string) string func (v *ThingView) Translate(lang string) { v.Name = v.Thing.Name.Translate(lang) v.Description = v.Thing.Description.Translate(lang) // ... } может кто сталкивался, какой самый безболезненный способ с этим работать?
Aleksandr
ты же 2 недели назад спрашивал про это
Anton
ну задача та же, там про что-то другое был вопрос 🙂
Aleksandr
поля с префиксом точно нет. храни в отдельной таблице
Dmitry
Вот вот
Anton
а, там было про то, почему когда есть тэг json:"...,omitempty" и используется кастомный метод MarshalJSON, то omitempty игнорируется
Anton
окей, спасибо. а реально вообще будет сделать некую функцию, основанную на рефлекшене, что-то типа func Translate(v interface{}) {}, которая сама будет проходиться по полям переданного в него объекта, понимать, что они определённого типа, например, TranslatedString и переводить их через поинтер? ну, чтобы ручками не писать методы к каждой ...View структуре.
Aleksandr
зачем это все нужно?
Aleksandr
у тебя есть два кейса - перевод интерфейса для юзера и перевод самого текста в админке для админов. верно?
Anton
да
Aleksandr
ну и это два разных кейса, которые по разному решаются
Anton
вооот, я поэтотму и спрашиваю, в какую сторону смотреть, потому что уже нагородил кода, но чё-т мне не нравится, как это всё выглядит
🍗
Подскажите, отправляю ajax'ом json запрос с ID, но на Go не могу его получить. c.Header("Content-Type", "application/json") fmt.Println(c.DefaultPostForm("id", "0")) Киньте ссылочку плз. Ибо много пробовал, и всегда пустота приходит.
Aleksandr
вооот, я поэтотму и спрашиваю, в какую сторону смотреть, потому что уже нагородил кода, но чё-т мне не нравится, как это всё выглядит
реши отдельно обе задачи. для юзера определи нужный язык, закинь в контекст, в нужном месте достань из базы данные. для админа воспользуйся другим методом - достань все данные для редактирования.
🍗
верно в json, как можно посмотреть что приходит постом?! Что-то вроде var_dump'а ?
Anton
var d interface{} if err := json.NewDecoder(r.Body).Decode(&d); err != nil { panic(err) } fmt.Printf("%#v\n", d)
🍗
var d interface{} if err := json.NewDecoder(r.Body).Decode(&d); err != nil { panic(err) } fmt.Printf("%#v\n", d)
я фрейм Gin использую, тут в параметры функции указатель передается на gin.Content
🍗
Получаю варнинг "Headers were already written. Wanted to override status code 400 with 200"
Anton
реши отдельно обе задачи. для юзера определи нужный язык, закинь в контекст, в нужном месте достань из базы данные. для админа воспользуйся другим методом - достань все данные для редактирования.
хранить короче примерно таким образом, получается? type Translation struct { ID *uuid.UUID Value string Language string } type Thing struct { ID *uuid.UUID NameTranslations []Translation NameTranslationsIDs []uuid.UUID }
Aleksandr
что такое Thing?
Anton
сущность, у которой есть переводимые поля, например, отель, номер, апартамент
arkady
Ребзя, а как удалить из слайса элемент не по индексу, а по значению? есть чтото типо питоновского list.remove(elem)?
Daniel
никак
arkady
перебором?
Daniel
да
arkady
тогда получается, что если мне нужно хранить список id юзеров, допустим, лучше в мапу класть, чтоб по id просто брать и удалять так же?
Daniel
собственно, list.remove(elem) тоже делает перебор
Daniel
видимо, да
arkady
собственно, list.remove(elem) тоже делает перебор
ага, я думал, мб встроенная есть, а я не знаю
arkady
спасибо
Daniel
встроенная что?
arkady
функция
Dmitriy
встроенная что?
готовая функция, которая делает перебор и удаление)
Алексей
и неготовую просто так не напишешь
Алексей
дженериков то нету
Алексей
ой, набросил случайно
Dmitriy
и неготовую просто так не напишешь
а не пояснишь зачем тут дженерики? там же просто объход в цикле и сравнение входящего значения функции со значением ключа и если найдено, то удаление
Daniel
ой, набросил случайно
не, в лужу пукнул
Daniel
побаню
Daniel
потому как смысла в этом всем нет
Джамиль
Реклама какая
Daniel
коллеги, которые тут вечно за rust топят. где у нас в телеграме правильное rust-cообщество?
Aleksandr
https://t.me/rustlang_ru
Daniel
спасибо
🏁Александр
универсальный конвектор есть на гоу?
🏁Александр
из любого формата в jpg например
Aleksandr
конвекция
Мерль
из любого формата в jpg например
Считываешь в Image, энкодишь в нужный формат
Cat
пока ты не залетел, никого не оскорбляли
Zver
Не видел там такого, обычный диалог.
Cat
Не видел там такого, обычный диалог.
диалог вайпнули, но и оскорблений там не было
Daniel
я тоже не видел, кстати
Vadim
Они такие злые, потому что у них gc нет.
Vadim
Надо им подарить
Daniel
у них работы нет, а не gc
Sebor▂▅▇█▓▒░
Ток зашел - сразу накинулись 😢
Cat
это джерк
Cat
Ток зашел - сразу накинулись 😢
потому что ты набросил, что ты не гофер, но по факту гофер
Sebor▂▅▇█▓▒░
Sebor▂▅▇█▓▒░
что там было?
Cat
подскажи, кого ты имеешь в виду?
Cat
никак не могу распарсить
Cat
уже 5 минут пытаюсь понять
Маjко
Праздный интерес
Zver
Вы о чем?
Cat
ну не томи