Anonymous
курс от mail.ru на курсере
Anonymous
блокировка чего
Михаил
Блокировка программы
🅞leksiy
Советую почитать про каналы, рутины и блокировки, иначе, без понимания как там все работает, можно наворотить делов. Это не то, с чем надо разбираться, когда уже существует непонятное поведение.
Михаил
А в гоу есть неблокирующие чтения (допустим сокета)? Где почитать?
🅞leksiy
Запускаешь чтение в рутине и результат отправляешь в канал, а там сам разруливаешь, ждать, не ждать, тайм-аут и тп. Через select case
Михаил
А, т.е. без горутины блокирующий сокет?
🅞leksiy
Михаил
Михаил
В коробке
🅞leksiy
Я, к сожалению, не помню, есть ли там методы асинхронные. Ну они будут канал возвращать, в таком случае
🅞leksiy
Посмотри доку)
Михаил
Угу, пасиб
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Ты хотя бы отправил минимальный код твоей проблемы, так быстрее помогут.
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
А вообще да, почитай про каналы и пакет sync. Ооочень полезно и в будущем без этого сложно обойтись.
Emil
Да ничего толкового придумать не могу. Все на закрытие соединений и чтений думаю, но не ровно же минуту каждый раз. Может респонс какой тяжёлый появляется... Может где-то вызовы ушли в цикл... В общем хз)
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Правильно. Почитай про стек и сборщик мусора. Тоже полезно. Вернуть указатель на структуру производительно при возврате больших структур данных.
🅞leksiy
Сделай просто return &update, err
🅞leksiy
Зачем эти проверки там?
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
🅞leksiy
Ну тогда выше задай тип со *
🅞leksiy
И будет nil
🅞leksiy
По умолчанию
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Глянь например в библиотеку Syfaro telegram bot api. Он как раз таки возвращает не указатель, а копию структуры, потому что в этом случае скорее всего производительнее.
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Но я могу ошибаться
Emil
Солидно
Alexander
если побайтово получать, а не пытаться все в память вычитать, то и пофиг
Alexander
ошибка ошибка. лимиты везде нужны
Alexander
и данные валидировать
Maks
А почему не размер файла проверять?
Maks
Ну я к тому что ты проверяешь не стороны а чисто вес
Alexander
круто было б научиться переваривать такое, а потом ограничения вводить)
Maks
А может кто поделиться своим идеальным миром миграций на го. Кто как его видит.
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
Maks
Почему
Anonymous
кому не тяжело чекните пж реализацию гексагонки(хочу понять правильно ли делаю или нет)
https://github.com/kenerase/hexagonal
edited: одно только не понятно, хенлдеры пихать в апп или создать отдельный каталог?
Alexey
Лайфхак "как не писать лишние проверки и присваивания" (именованный return):
func GetUpdateStruct(bytes []byte) (update *Update, err error) {
err = json.Unmarshal(bytes, &update)
return
} update, err := GetUpdateStruct(bytes)
Минус 5-6 строк 😊
Herman
Herman
Или я просто не привык, но именованный ретурн, а особенно пустые ретурны меня всегда слегка смущают
Bagasl
Anonymous
https://povilasv.me/go-scheduler/
Anonymous
Круто ничо непонятна
Anonymous
...
Anonymous
Да кто такие эти гоферы
Bagasl
+1
Если и делать именованный возврат - то не делать просто return без названий переменных
Anonymous
заполните форму перед встречей
Anonymous
что это может значить?
L
а тут на любые темы по гохе можно вопросы задавать?
Anonymous
меня взяли?
Maks
:(
L
L
Есть идеи, если бегло глянуть, где я мог косякнуть?
L
bot отдельно работает, scheduler писал сам, видимо в нем факап
L
var stop chan bool
type Scheduler struct {
Interval int
DB *storage.Database
Task func()
}
func New(task func(), interval int) (s *Scheduler) {
s = &Scheduler{
Interval: interval,
Task: task,
}
return
}
func (s Scheduler) Start() error {
return schedule(s.Task, 2*time.Second)
}
func (s Scheduler) Stop() {
stop<- true
}
func schedule(function func(), delay time.Duration) (err error) {
stop = make(chan bool)
go func() {
for {
function()
select {
case <-time.After(delay):
case <-stop:
return
}
}
}()
return
}
L
Сорян если много кода, не вижу в описании или закрепе правил сообщества(
Emil
Как минимум можно вместо %s писать %v (или %w где еррорф), а то ни одной ошибки там не отработало кажется (если стрелочки вручную)
L
L
мне кажется из логики oklog/run Start() не должен возвращать сразу результат, а работать бесконечно и завершать работу при появлении ошибки
L
буду благодарен, если кто-то подскажет как правильно, если юзал данную концепцию с oklog/run
@Thermophoto
Чем отличается функция fmt. Sprintf от fmt.Printf?
Emil
С вроде возвращает тебе форматированную строку, а обычный ее выводит
Herman
первая возвращает строчку
Andrey
var stop chan bool
type Scheduler struct {
Interval int
DB *storage.Database
Task func()
}
func New(task func(), interval int) (s *Scheduler) {
s = &Scheduler{
Interval: interval,
Task: task,
}
return
}
func (s Scheduler) Start() error {
return schedule(s.Task, 2*time.Second)
}
func (s Scheduler) Stop() {
stop<- true
}
func schedule(function func(), delay time.Duration) (err error) {
stop = make(chan bool)
go func() {
for {
function()
select {
case <-time.After(delay):
case <-stop:
return
}
}
}()
return
}
А ты понимаешь, что ты везде работаешь с копиями объекта, а не с тем, у которого вызываешь?
Плюс зачем тебе глобальный канал, почему его в структуру не вынести?
И еще, если тебе надо "сигналинг" по каналу, то используй минимальный тип канала struct{}, ну или пакет context
Null
Интерфейсы в Go — как красиво выстрелить себе в ногу
https://habr.com/ru/post/597461/
@Golang_google
Nikita
Ilya
https://habr.com/ru/company/kaspersky/blog/591725/
Igor
Alexander
Гыг)
Belka
У меня есть телеграмм бот, обязан ли я добавить в него рекламу (Sponsored messages), которые нужно добавить до 2022 или это распространяется только на каналы, где уже есть реклама и на неофиц. клиенты
Emil
Emil
В плане, через апи телеги рекламу все равно не убрать
Belka
для написания ботов я использую https://github.com/go-telegram-bot-api/telegram-bot-api, но там нет возможности добавить эти Sponsored messages, да и в приницпе инфу о том, что это распространяется на ботов не нашел
@Thermophoto
Никто на стажировку в вайлбериз не устраивался, как там?
v̲̅ɭคD☬
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
v̲̅ɭคD☬
Чем?
https://grammy.dev/guide/deployment-types.html#comparison