Anonymous
Oleg
Ну и правильный ответ : https://stackoverflow.com/questions/28718682/how-to-get-a-substring-from-a-string-of-runes-in-golang
string([]rune(str)[:20])
Илья
https://github.com/gyuho/goraph
Илья
что-нибудь такое
Илья
может быть, там что-то есть
Anonymous
Мб ещё тут есть чего
Anonymous
https://github.com/emirpasic/gods
Vasiliy
всем привет
Vasiliy
может кто подсказать как динамически создать массив кнопок из массива? пример такой есть https://github.com/go-telegram-bot-api/telegram-bot-api/wiki/Simple-Keyboard
Vasiliy
не могу заполнить массив рядами
Aleksandr
Vasiliy
парсю сайт, получаю набор ссылок (список конференций), и из него надо сделать клавиатуру
Vasiliy
для бота
Vasiliy
сам правда джавист
Vasiliy
в джавовском api проблем не возникло с этим вопросом
Vasiliy
по ссылке пример, с захардкоженными кнопками
Vasiliy
мне надо создать их из массива
Vasiliy
туплю уже полчаса)
Aleksandr
slice передаешь так: ...rows или так rows...
Aleksandr
точно синтаксис не помню
Aleksandr
он распаковывается в variadic arguments или как там это на го называется..
Aleksandr
rows... - судя по коду этого же метода https://github.com/go-telegram-bot-api/telegram-bot-api/blob/master/helpers.go#L567
Vasiliy
можешь помочь с примером?
Aleksandr
я ссылку дал на метод с примером.
Aleksandr
слайс есть?
Oleg
var buttons := []tgbotapi.KeyboardButton {
tgbotapi.NewKeyboardButton("abc"),
tgbotapi.NewKeyboardButton("def"),
}
var row := tgbotapi.NewKeyboardButtonRow(buttons...)
Oleg
Три точки распаковывают слайс в variadic аргументы
Aleksandr
да
Vasiliy
Aleksandr
два года опыта на go.
nikita
короче двумерный массив гугли
Илья
построить ряды с помощью NewKeyboardButtonRow
Brown
можешь помочь с примером?
countColumns := 5
countRows := 3
rowsKeybords = [][]KeyboardButton
for numberRow := 1; numberRow < countRows; numberRow++{
columnsKeybord := []KeyboardButton
for numberColumn := 1; numberColumn < countColumns; numberColumn++{
columnsKeybord = append(columnsKeybord, tgbotapi.NewKeyboardButton("Название кнопки"),)
}
rowsKeybords = append(rowsKeybords, columnsKeybord)
}
keyboard := tgbotapi.NewReplyKeyboard(rowsKeybords)
Brown
Примерно дальше сами
Brown
Не скомпиллируется
Brown
Но согласен со всеми вопрос очень странный, к go отношения особого не имеет, тривиальная задача
Vasiliy
два года опыта на go.
ничего смешного) опыт джава больше, и там проблем нет) а периодический свитч в гошечку проблемно даётся
Vasiliy
всё оказалось проще
msg := tgbotapi.NewMessage(int64(id), "List")
var keyboard [][]tgbotapi.KeyboardButton
for _, c := range Confs {
keyboard = append(keyboard, tgbotapi.NewKeyboardButtonRow(tgbotapi.NewKeyboardButton(c.name)))
}
markup := tgbotapi.ReplyKeyboardMarkup{
ResizeKeyboard: true,
Keyboard: keyboard,
}
msg.ReplyMarkup = markup
bot.Send(msg)
Vasiliy
не заметил что там уже массив кнопок
Slava
Как думаете, можно ли, в двух разных горутинах, в одной заменяем значение ссылки в поле структуры, к примеру
struct bla { field1 *BlaType}
а в другой читаем это поле, и свежесть данных не важна?
Mike
хотите узнать, в чем ебала была?
Mike
https://github.com/golang/go/issues/16079
Mike
вот у меня такой же трейс как у того чувака
Oleg
https://godoc.org/sync/atomic
Раз есть такой пакет, наверное нельзя :)
Mike
В ТОМ ЧТО ХЭШМАПА КОТОРУЮ Я ДЛЯ ОЧЕРЕДИ ИСПОЛЬЗОВАЛ НЕ ТРЭД СЕЙФ И ЭТО И ПАДАЛО С ТЕМ ТРЕЙСОМ
Mike
но почему он ориджинейтился в транспорте и хттп клиенте ояебу
Slava
Slava
sync/atomic нужен для синхронизации, в моём примере не важно, старые ли там данные или новые
Vladislav
Slava
потому что вопрос был не в том, что использовать
Vladislav
И что у тебя там будет на старте? Не выйдет, что там нулевые данные пока 1 поток не обновит их?
Slava
не важно, null там или нет
Vladislav
Ну если тебе вообще неважно на целостность данных, то можешь так делать. Но если там есть чему ломаться, то оно сломается.
Slava
что сломается?
Slava
вот пример к задаче https://play.golang.org/p/J6-rgK8S8J
Vladislav
Ну так оно работать не будет.
Vladislav
Замыкания так не работают.
Slava
почему не будет?
Slava
почему замыкания так не работают?
engelbart
а где gogo3
Slava
свежесть данных не важна, я писал выше
Slava
если они схлопываются - тоже всё равно
engelbart
да чорт с ней с свежестью, я чото не пойму пока куда деваются. таймер же типа одинаков.
engelbart
ну т.е. понятно что псевдопотоки и прочее, но почему так точно, только чётные
Mike
замыкания копируют все что нужно в себя
Mike
так что если хочешь джона менять, сделай его указателем
Slava
Mike
а ну у тебя внутри поле указатель
Mike
ок
Slava
даже если не указатель, то какая разница? =)
Мерль
http://golangshow.com/episode/2017/05-31-102/
Мерль
#подкаст
Mike
ну ок