Nazar
вот бляха
Nazar
что же делать то...
Alexander
Alexander
https://stackoverflow.com/q/19646717
Alexander
Тут есть неплохой пример как сделать потокобезопасным, и не все функции вам нужны, но хз подойдёт ли такое
Nazar
а как мне буфер очищать?
Nazar
оно походу и в правду не работает
Nazar
из за того что в горутине
Alexander
Так и очищать как в примере, обернуть в враппер и использовать мьютексы
Alexander
Либо не используйте readFrom, и сами читайте в цикле
Alexander
Тут вам поможет конструкция select case default
Nazar
t := time.Now() ticker := 1 out, _ := os.Create("test0.ts") defer out.Close() for { io.CopyN(out, resp.Body, 1000) if time.Since(t)-time.Second*6 >= time.Second { t = time.Now() out, _ = os.Create("test" + strconv.Itoa(ticker) + ".ts") log.Println("Ss") ticker++ } }
Nazar
это вообще гавно?
Alexander
Case слушает тик, пишет в файл и очищает буфет
Alexander
А default читает из поток по N байт, так же как это делает readfrom
Alexander
И тогда reset будет работать
Alexander
Сейчас reset не работает, потому что буфет используется двумя потоками, первый внутри readfrom, второй горутина
Nazar
А что значит по н байт?
Nazar
Это сколько?
Nazar
func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error) { b.lastRead = opInvalid for { i := b.grow(MinRead) m, e := r.Read(b.buf[i:cap(b.buf)]) if m < 0 { panic(errNegativeRead) } b.buf = b.buf[:i+m] n += int64(m) if e == io.EOF { return n, nil // e is EOF, so return nil explicitly } if e != nil { return n, e } } } не конца вдупляю
Alexander
Для ReadFrom это MinRead
Alexander
У вас может быть что-то другое, меньше, больше
Nazar
а подскажите на сколько это плохой варик? Просто работает идеально func dumpTS2HLS(url string, name string) error { resp, err := http.Get(url) if err != nil { return err } defer resp.Body.Close() t := time.Now() ticker := 1 out, _ := os.Create(name + "0.ts") defer out.Close() for { io.CopyN(out, resp.Body, 512) if time.Since(t)-time.Second*6 >= time.Second { READY++ log.Println(name + " ready: " + strconv.Itoa(READY)) t = time.Now() out, _ = os.Create(name + strconv.Itoa(ticker) + ".ts") ticker++ } } }
Заур
то есть io.Copy(out, resp.Body) но нужно out менять на лету
https://play.golang.org/p/WTTEZSvvYMx как-то так должно работать
Заур
Наверно
Nazar
ООО
Nazar
блин
Nazar
пишет пустые файлы
Заур
Ээ
Nazar
в принципе
Nazar
вроде понял
Nazar
в чем ошибка
Nazar
мб выйдет даже пофиксить
Nazar
очень благодарен
Nazar
это выглядит уже адекватно
Заур
я сам новичок, так что пардон за нерабочий код, так и не понял в чём ошибка 😀
Nazar
о
Nazar
вот
Nazar
добавил перед io.Copy out.UpdateFile("test" + strconv.Itoa(0) + ".ts")
Nazar
)
Nazar
и тикер изначално 1
Nazar
по сути там нет файла же в начале
Nazar
и там нил заместо файла
Nazar
правда хз, почему не выбивает ошибки
Заур
Аа, блин
Nazar
Очень Вам благодарен )
Nazar
Я ещё чуть понаглею, вот бы логику как то запихнуть полностью в этот вапер (таймер, обновление файла и.д.)
Nazar
это нужно copy ещё намутить
Nazar
как врайт?
Nazar
переписать типа
Заур
Хм, ща
Заур
Вот так пойдет? https://play.golang.org/p/FF-qq78r2Gb
Заур
Функция New запустит все и вернёт враппер
Заур
На враппер можно навешать уже все функции старт стоп, хранить на нём каналы на выход и т.п.
Заур
А в аргументах New можно передать адрес сайта
Nazar
Я чуть не это имел ввиду, типа вот как работа с файлом
Nazar
толко это работа с таким недофайлом
Nazar
когда работаешь как с обычным потоком
Nazar
но на самом деле, там происходят страшные вещи
Nazar
но вроде понял куда копат
Nazar
Болшое вам спасибо
Заур
Заур
Чё там, кто хочет взять меня в сеньеры golangа с зп 100500 кк в наносекунду
Заур
?
Заур
100500 чего? нанокопеек?
Если в наносекунду, то можно и нанокопеек
Alexander
@goflood
Alexander
Давайте про нанокопейки тут
Илья
Криптокопейки
aadz
Нет, но Заур человеку мега помог! Но зачем же сразу про деньги? Да и работу тут в соседнем чате ищут
Антон
правда хз, почему не выбивает ошибки
Потому что "make zero value usable"
Alexey
Здравствуйте, друзья! Довелось писать на Go (опыта не имею). Подскажите пожалуйста как в GORM создать несколько записей в БД одним запросом? Сейчас использую код такого вида db.Table("table").Create(&models.Data{ Field1: value1, Field2: value2, }) создающий записи по одной. Попытка передать слайс не увенчалась успехом
kås
Не нужен тебе горм
aadz
Надо открывать транзакцию и слать SQL в ней. Потом закрывать. Да даже и транзакцию не надо
aadz
для этого - точно не нужен
Заур
Нет, но Заур человеку мега помог! Но зачем же сразу про деньги? Да и работу тут в соседнем чате ищут
Это стёб был, типо во какой я крутой прогер, где там очередь на меня
Заур
Похоже, юмор у голангистов такой же прямой и безхитростный, как и сам язык 😀
aadz
Да и на сишников очереди нет в тех странах, где мы живем. Что ж поделаешь? Вся эта очередь скоро будет стоять на аттракцион "избить депутатку яровую и ее подельников"