Alexey
А ещё лучше – посмотрели бы документацию сторонней либы :) Вряд ли она просто так возвращает пустые интерфейсы
Slach
fmt.Printf("BLA1 %v\n", l) fmt.Printf("BLA2 %s\n", l) fmt.Printf("BLA3 %T\n", l) fmt.Printf("BLA4 %#v\n", l) выдает BLA1 [[91 49 32 50 32 51 93]] BLA2 [[1 2 3]] BLA3 []interface {} BLA4 []interface {}{[]uint8{0x5b, 0x31, 0x20, 0x32, 0x20, 0x33, 0x5d}} чето как то все еще сложнее ну вот как мне этот самый []uint8 (он же []byte) конветнуть это в строковый слайс?
engelbart
switch aaa.(type)
Sheldhur
Может кому-то будет интересно, статья про Go (не булл щит компаний): https://habrahabr.ru/post/329582/
Но когда появится необходимость писать уже чуть более сложную бизнесс логику, то полезет много неприятных моментов в виде в рефлексию и/или написание полотна однообразного кода. Go не самый удачный выбор для сложных веб-приложений. на сколько верно утверждение?
Michael
Кто-то так считает. ну его право. ИМХО, это не так.
Дмитрий
ребята, а есть объяснение тому, что если я делаю приведение типов string() для массива байтов, и для каждого байта в отдельности с конкатенацией плюсом, то на выходе я получаю разные результаты для непечатных символов?
Sheldhur
кодировка
Sheldhur
мб
Mike
или потому что у тебя там юникод и некоторые символы больше байта?
Дмитрий
ну да, результат как раз получается из-за разной кодировки, но байты то передаются одни и те же 0xd8 (не помню сейчас уже точно код) если конвертировать в составе массива байтов превращается в \xd8 а если просто отдельный байт конвертировать, то получается \u00d8
Oleg
Ну тк \xd8 == \u00d8. Другая проблема, что d8 - это не отдельный символ, а часть многобайтового символа. Как уже написали выше.
Дмитрий
равно, если сравнивать строковыми функциями, а если побайтово, то разные
Дмитрий
var test1 [1]byte var test2 byte test1[0]=141 test2=141 fmt.Println(strconv.Quote(string(test1[:1]))) fmt.Println(strconv.Quote(string(test2)))
Дмитрий
по сути я и в первом и втором случае конвертирую только один байт, а результаты разные
Дмитрий
вопрос мой в том, для чего это так задумано?
Slava
Как думаете какая разница между массивом байт и байтом?
Mike
*прыгает на месте и поднимает руку как гермиона* тип?
Anton
салют всем подскажите самый goway способ конвертнуть [][]byte в []string ???
Вот как раз статья про unsafe вариант https://katcipis.github.io/2017/04/21/hack-go-types.html
Anonymous
По поводу "без аллокаций". Преждевременная оптимизация - зло.
Constantine️
ты просто не умеешь
Мерль
https://github.com/golang/go/wiki/CompilerOptimizations
Roman
А кто делал exporter для prometheus? Как обновлять метрики при обращении к /metrics, а не по таймеру например? Что-то не гуглится.
Дмитрий
Как думаете какая разница между массивом байт и байтом?
это очевидно, неочевидно (для меня), что операция приведения типа недистрибутивна
Andrey
Всем привет, помогите с регуляркой в go, на перле у меня все ок, в го чет не але... r_port, _ := regexp.Compile(`Ethernet.*\/(\d+)`) snr_port := r_port.FindString(sw.Port) тестовая строка Ethernet1/0/10
Andrey
вроде решил, thnx)
Roman
Хэндлер на /metrics и делать что там нужно чтобы получить числа
Там у prometheus свой http хендлер, который скрывает все внутренности ручной генерации ответа/метрик, не вариант. Говнокод в целом такой http://img.parcsis.net/i/lvqqomk8bcqu8vv0xjx5oc8we.jpg
engelbart
patter: "/" это именованные параметры?
Aleksandr
?
engelbart
про скрин выше handlefunc(pattern :"/",....
Aleksandr
про скрин выше handlefunc(pattern :"/",....
ну хэндлер матчит / в урле. То есть сработает на /
engelbart
я про сам синтаксис, не встречал раньше
engelbart
b = myfunc ( key: "blabla")
Aleksandr
я про сам синтаксис, не встречал раньше
синтаксис чего? это стандартный синтаксис http-сервера
engelbart
https://github.com/golang/go/issues/12296
engelbart
походу ж нету у нас named parameters
engelbart
а я по скрину подумал что есть
Aleksandr
а я по скрину подумал что есть
это idea-вский движок начал подсказывать в прошлом году
engelbart
ясно, сенкс
engelbart
а VERSION это у вас global var?
Aleksandr
а VERSION это у вас global var?
константа видимо
engelbart
ой, код не ваш, сори
engelbart
Просто связи не увидел между горутиной metricupdate и handle
Alexey
Подскажите как переписать этот ужасный if else. Нужно разное поведение в завимости от mediaFile.TypeContent — "video" или "photo" (NewVideoUpload или NewPhotoUpload) Сейчас все сделано копинастом, потому, что я не могу как в каком нибудь Питоне просто переопределить file := tgbotapi.NewPhotoUpload в file := tgbotapi.NewVideoUpload 😔 gist — https://gist.github.com/targence/b86bcd920f247eb5bfab61bfe620e03c
Alexey
Aleksandr
через switch/case
Alexey
мб, фабрика. UPD но правда пока она наверное не нужна.
Alexey
через switch/case
а чем switch/case тут отличается от if?
Alexey
Alexey
через switch/case
ошибка что в одном, что в другом случае, что file не определен
Anonymous
а bot.Send что принимает, какой тип?
Alexey
а ределить его перд if я не могу =) потому что тип у него разный
Brown
file надо обьявить через var выше case
Anonymous
по-моему bot.send принимает интерфейс вот его и нужно как var file объявлять
Aleksandr
Aleksandr
ошибка что в одном, что в другом случае, что file не определен
file надо снаружи определеять. скоуп у него внутри switch/case
Alexey
Alexey
Alexey
Aleksandr
var file опреедели как тип, принмаемый bot.send
Brown
разные... вот скрины
Interface один наверное
Alexey
file надо обьявить через var выше case
не получается. какого типа мне file определять? он может быть photiConfig и videoConfig
Alexey
господа, может кто подскажет. Задача: Мне нужно хранить порядок записей в бд, предположим у меня есть что-то типа директорий, в которых находится контент, необходимо хранить sequence каждого контента. Вариант по порядку хранить 1,2,3,4 сразу отпадает, т.к при смене позиции контента, необходимо обновлять все последующие эл. контента. Какой правильно хранить подобные записи?
Alexey
Также думал про ступени с шагом по 10000 например, но опять-таки со временем две ед. выравниются
Brown
не получается. какого типа мне file определять? он может быть photiConfig и videoConfig
// Send will send a Chattable item to Telegram. // // It requires the Chattable to send. func (bot *BotAPI) Send(c Chattable) (Message, error) { switch c.(type) { case Fileable: return bot.sendFile(c.(Fileable)) default: return bot.sendChattable(c) } }
Alexey
поле order
и что поле order? почему не sequence?
Aleksandr
Brown
ну Chattable
Наверное ответ не мне)
Anonymous
Наверное, лучше Fileable
Aleksandr
Наверное ответ не мне)
а, ну да. спрашивающему
Alexey
как хочешь назови
ну и? я разве спрашивал как назвать колонку в бд?)
Aleksandr
ну и? я разве спрашивал как назвать колонку в бд?)
ну я тогда не понимаю вопроса. я понял как "как хранить порядок"
Alexey
ну да, всё верно, как хранить порядок. У меня например есть 100 записей, подвинули контент с 99 позиции на 50. Мне при этом обновлять 48 записей?)
Илья
да
Alexey
херня решение
Anonymous
делай с шагом, потом когда значения пересекутся обновляй