
RenegatumSoul
02.07.2018
16:30:42
мб баг просто

Андрэ
02.07.2018
16:31:17
удялял его, естественно не работало. открывал новый терминал по 100 раз - все так же

RenegatumSoul
02.07.2018
16:32:04
можешь в личку env кинуть?

Вячеслав
02.07.2018
16:33:49
скажите, а обязательно тут передавать структуру? можно ли просто маппинг передать ?
t, _ := template.ParseFiles("index.html")
t.Execute(w, &page{Title: "Just page", Msg: "Hello World"})

Google

Вячеслав
02.07.2018
16:34:10
птом что для каждой страницы делать отдельную структуру... не понимаю зачем такое нужно

RenegatumSoul
02.07.2018
16:36:56

Андрэ
02.07.2018
16:38:36
ну это не решение же

RenegatumSoul
02.07.2018
16:39:38

Nurzhan
02.07.2018
17:48:24

Alfred
02.07.2018
20:30:50
прием
как указать свою маску подсети для расчета
package main
import (
"fmt"
"net"
)
func main() {
ip := net.ParseIP("172.24.1.1")
mask := ip.DefaultMask() # тут хочется указать свою маску подсети но не знаю как
network := ip.Mask(mask)
fmt.Println(network.String())
}
необходимо из 172.24.1.1 255.255.255.0 получить 172.24.1.0/24

Nazary
02.07.2018
21:16:18
@Amplitudo здравствуйте, всё вышло, но у меня нет buf.Flush()
а buf.Reset() что то не особо радует
вообще точнее
https://play.golang.org/p/jbEJMDLgOUl

Google

Vasily Romanov
02.07.2018
21:18:11

Nazary
02.07.2018
21:18:35
так файл же типа каждый раз другой
нет?

Nurzhan
02.07.2018
21:19:13
Defer будет выполняться только после завершения функции

Nazary
02.07.2018
21:19:30
ааа
извиняюсь
вот так оно
буфер не стирается

Vasily Romanov
02.07.2018
21:24:37
буфер не стирается
https://golang.org/pkg/io/#CopyN
https://golang.org/pkg/io/#LimitedReader
там хитрее надо
может что-то из этого подойдёт лучше

Nazary
02.07.2018
21:25:29
так по времени нужно (
а не по размеру

Vasily Romanov
02.07.2018
21:25:35
https://habr.com/post/306914/

Nazary
02.07.2018
21:25:44
не всегда выйдет узнать сколько нужно байтов для n секунд

Vasily Romanov
02.07.2018
21:26:22
100%-й точности я сходу не скажу как добиться
примерной - можно
типа читать каждый раз по Х. засекать скорость, если на следующий Х не хватит - дампить и сбрасывать таймер

Nazary
02.07.2018
21:27:46
а куда читать? bytes.Buffer?)
и как его сбрасивать?)
вот что я делаю не так...
Reset resets the buffer to be empty, but it retains the underlying storage for use by future writes.

Google

Vasily Romanov
02.07.2018
21:29:26
да, в буфер
сброс таймера смотрите в доке
вы в отдельной горутине это делаете

Nazary
02.07.2018
21:30:15
да

Vasily Romanov
02.07.2018
21:30:30
а в соседеней у вас бесконечное чтение туда, я хз что там получается, может треш
оно не горнутино безопасно там внутри

Nazary
02.07.2018
21:30:48
получаеться нормально
просто не чиститься буфер
хм

Антон
02.07.2018
21:33:01

Vasily Romanov
02.07.2018
21:33:38

Антон
02.07.2018
21:34:12
Эх, щас бы в 2к18 исходники читать для определения потокобезопасности

Vasily Romanov
02.07.2018
21:36:55
https://golang.org/src/bytes/buffer.go
ctrl+f
вводим sync
не находим

Антон
02.07.2018
21:37:25

Nazary
02.07.2018
21:48:31
вот бляха
что же делать то...

Alexander
02.07.2018
21:55:56
https://stackoverflow.com/q/19646717
Тут есть неплохой пример как сделать потокобезопасным, и не все функции вам нужны, но хз подойдёт ли такое

Nazary
02.07.2018
22:09:18
а как мне буфер очищать?

Google

Nazary
02.07.2018
22:09:47
оно походу и в правду не работает
из за того что в горутине

Alexander
02.07.2018
22:14:35
Так и очищать как в примере, обернуть в враппер и использовать мьютексы
Либо не используйте readFrom, и сами читайте в цикле
Тут вам поможет конструкция select case default

Nazary
02.07.2018
22:37:01
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++
}
}

Admin
ERROR: S client not available

Nazary
02.07.2018
22:37:05
это вообще гавно?

Alexander
02.07.2018
22:37:06
Case слушает тик, пишет в файл и очищает буфет
А default читает из поток по N байт, так же как это делает readfrom
И тогда reset будет работать
Сейчас reset не работает, потому что буфет используется двумя потоками, первый внутри readfrom, второй горутина

Nazary
02.07.2018
22:45:39
А что значит по н байт?
Это сколько?
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
02.07.2018
22:51:32
Для ReadFrom это MinRead
У вас может быть что-то другое, меньше, больше

Nazary
02.07.2018
23:30:28
а подскажите на сколько это плохой варик?
Просто работает идеально
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++
}
}
}

Zaur
02.07.2018
23:37:15
Наверно

Google

Nazary
02.07.2018
23:41:56
ООО
блин
пишет пустые файлы

Zaur
02.07.2018
23:43:52
Ээ

Nazary
02.07.2018
23:46:06
в принципе
вроде понял
в чем ошибка
мб выйдет даже пофиксить
очень благодарен
это выглядит уже адекватно

Zaur
02.07.2018
23:48:38
я сам новичок, так что пардон за нерабочий код, так и не понял в чём ошибка ?

Nazary
02.07.2018
23:50:18
о
вот
добавил перед io.Copy out.UpdateFile("test" + strconv.Itoa(0) + ".ts")
)
и тикер изначално 1
по сути там нет файла же в начале