@proGO

Страница 1032 из 1674
Kirill
04.12.2017
11:34:26
А вот проверить, что на диске есть хотя бы 10МБ - было бы неплохо

nezorflame
04.12.2017
11:34:55
в общем, стоит ли тестить? - стоит а как именно - уже от юз-кейса

Alexey
04.12.2017
11:37:38
нужно больше тестов....

Vlad
04.12.2017
11:39:02
Джентмены!

Google
Vlad
04.12.2017
11:39:20
Есть код такого толка: ping := time.NewTicker(PingPeriod).C

Нужно ли как-то освобождать ресурсы?

Andrew
04.12.2017
11:39:52
да, тикер надо стопать

Vlad
04.12.2017
11:39:55
По сути, это канал

Агась, т.е. вынести в дефер (у меня таких три тикера)

nezorflame
04.12.2017
11:40:28
ну либо в дефер, либо по нормальному в конце функции закрыть

Vlad
04.12.2017
11:40:55
Короче, у меня механизм пинг-понга, как все уже догадались

И есть три тикера

Закрою их, значит, если понг не пришел (в том месте, где и connection закрываю)

Хм. Еще вопрос, если у меня ping - это канал, а не инстанс тикера, как бы его закрыть

nezorflame
04.12.2017
11:44:04
надо объявить тикер

а не C

получать из ticker.C

Google
nezorflame
04.12.2017
11:44:16
и закрывать ticker

Vlad
04.12.2017
11:44:17
Агась

Тогда у меня будет 6 переменных

pingTicker

ping

nezorflame
04.12.2017
11:44:30
зачем?

Vlad
04.12.2017
11:44:33
pongTicker..

Ну и так далее

nezorflame
04.12.2017
11:44:49
просто вместо переменной канала будет переменная тикера

Vlad
04.12.2017
11:45:01
Сейчас скину код, секунду

https://play.golang.org/p/a7b6xO_bmH

Andrew
04.12.2017
11:48:54
https://play.golang.org/p/FzzkKRaFwN

1 строчка добавилась

Vlad
04.12.2017
11:49:36
Агась

В кейсе просто pinger.C

Кстати, почему я не додумался бы до такого простого имени, как pinger? Грустно Спасибо большое!

Даже нельзя сказать, что одна строчка добавилась

А с каналами как быть?..

Ага, если еще нужно выйти из бесконечного цикла, то только Labels мне в помощь?

nezorflame
04.12.2017
11:53:02
ну общий случай - выход с помощью goto

Google
Vlad
04.12.2017
11:53:18
https://stackoverflow.com/questions/11104085/in-go-does-a-break-statement-break-from-a-switch-select

nezorflame
04.12.2017
11:53:18
это если надо продолжать исполнение

Vlad
04.12.2017
11:53:31
А если я сделаю return?

вывалюсь же из функции

nezorflame
04.12.2017
11:53:40
то выйдет из программы

это же main

или там функция?

Vlad
04.12.2017
11:54:10
У меня это запускается в хенддлере, типа go pingPong()

nezorflame
04.12.2017
11:54:13
а

тогда закрыть каналы и return

Andrew
04.12.2017
11:54:25
каналы закрывать не надо

Vlad
04.12.2017
11:54:28
А потом там работа с сокетами

Vlad
04.12.2017
11:54:39
Они же только на чтение, да?

nezorflame
04.12.2017
11:54:41
а, они в рамках горутины

да

Vlad
04.12.2017
11:54:44
Из-за этого не надо?

Andrew
04.12.2017
11:54:50
только если ты не хочешь всю программу остановить

как только канал закрыт select тут же прочитает с него ошибку

точнее пустое значение

nezorflame
04.12.2017
11:55:47
в случае return-а нет

Google
Vlad
04.12.2017
11:55:58
Не, у меня сейчас все вот так func Hanlder(resp, req) { go pingPong() //Work with websocket connection }

Как бы работа п-п не смешивается с обычными сообщениями

Но когда мне не пришел понг, я должен остановить механизм п-п

nezorflame
04.12.2017
11:56:44
Не, у меня сейчас все вот так func Hanlder(resp, req) { go pingPong() //Work with websocket connection }
выход из pingpong будет при случае case <-pongTimedOut: //Close conn ?

Andrew
04.12.2017
11:56:46
по хорошему тебе бы добавить сюда контекст

Vlad
04.12.2017
11:56:49
Да

Andrew
04.12.2017
11:56:56
и пихать его в pingPong

nezorflame
04.12.2017
11:56:57
да, контекст прям напрашивается

Vlad
04.12.2017
11:57:10
Ни разу не работал с ним, лишь слышал краем уха

На выходных порефакторю под него

Admin
ERROR: S client not available

Andrew
04.12.2017
11:57:22
и слушать его, если хендлер закрыто то и contex.Done() тоже что остановит селект

Vlad
04.12.2017
11:57:46
Хендлер закроется по другой причине

У хендлера есть переменная, close bool

М ы в бесконечном цикле в хендлере работаем с соединением

Если что-то пошло не так - сетим close в true и выходим из цикла

Andrew
04.12.2017
11:58:49
сложно...

Vlad
04.12.2017
11:59:01
Это первый наш опыт работы с ws

Andrew
04.12.2017
11:59:03
вот тебе видео одного известного человека про контекст

https://www.youtube.com/watch?v=LSzR0VEraWw

Google
Vlad
04.12.2017
11:59:31
Спасибо, мил человек

Погляжу

В общем, никаких best practice у нас нет с ws

Беда, нужно думать, а то код дублируется в каждом контроллере

Внутри бесконечного цикла куча замыканий

Slayer
04.12.2017
12:02:44
Здравствуйте, подскажите где собака зарыта, есть код

https://pastebin.com/X44ypq0y

ио итогу var db = database.Config{} fmt.Printf("%+v\n", db)

{DB:<nil>}

Vlad
04.12.2017
12:04:56
Последний вопрос от меня - каналы же можно не закрывать?

Andrew
04.12.2017
12:04:57
ну так а что ты хочешь? ты создал новую переменную и в ней естественно нулевой указатель

Vlad
04.12.2017
12:05:06
Чтобы DevOps потом меня не сьел

Andrew
04.12.2017
12:05:40
каналы сами по себе ресурсов не жрут

Vlad
04.12.2017
12:06:33
Угум-с, значит pinger.Stop() достаточно

Slayer
04.12.2017
12:10:45
и как мне доступ получить к структуре? var db *database.Config fmt.Printf("%+v\n", db) yt rfyftn

не канает

Andrew
04.12.2017
12:11:43
db := InitDB()

nezorflame
04.12.2017
12:11:52
присвоение-то где

товарищ ответил

Slayer
04.12.2017
12:13:08
return &Config{DB}

возвращено в структуру, сразу по адресу

по идее

Andrew
04.12.2017
12:14:41
@Slayer_r ты неверно понимаешь принципы присвоения значений в go. ты сначала обьявляешь типы а потом создаешь их экземпляры и инициализируешь

Страница 1032 из 1674