
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

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. ты сначала обьявляешь типы а потом создаешь их экземпляры и инициализируешь