Fedor
ENV
Je
какая разница, viper все умеет, идеально из env подсасывать
Alexander
ENV
типо через переменные окружения? а если их 25?
Fedor
А какая разница, в bashrc кинул и забыл
Mike
Кто как конфиги хранит в приложениях? ini? json? yaml?
да хоть томл, что тебе удобнее, то и бери, не?
Alexander
да хоть томл, что тебе удобнее, то и бери, не?
Так-то да, для себя выбрал yaml, но возможно есть best practices, хех)
Mike
ну обычно тебе нужна какая-то хуйня и ты добавляешь энв, потом их становится слишком много, ты охуеваешь, особенно если подменять туда-сюда надо и тестить, кладешь в джейсон, а потом если конфиг усложняется, в зависимости от привычек, или ничего не делаешь, или берешь что-то что попиздаче хранит структуры сложные
Alexander
Еще вопрос, после go test cover вижу coverage: 63.3% of statements
Alexander
есть какие-то утилиты или может параметры, которые подскажут что именно не покрыто?
Alexander
То есть какие кейсы я забыл, не учел при тестах....
Anonymous
какая разница, viper все умеет, идеально из env подсасывать
вайпер не все умеет. если сложная структура, то надо обращаться по полному имени ключа. например database.host. только в этом случае будет использована переменная DATABASE_HOST. если же на свое несчастье код работает со структурой вайпера, которая не находится в корне конфига, а например внутри узла database, то вызов GetString(“host”) проверит переменнную HOST, а не DATABASE_HOST. те чтобы юзать енвы, надо еще понимать, что всегда работаем с корнем конфига, что отсекает часть функционала вайпера
Alexander
https://blog.golang.org/cover
спасибо тебе, мил человек
Vladislav
спасибо тебе, мил человек
А вообще большинство редакторов умеет.
Alexander
Ну чет GoLand не могет, или я его еще не научился готовить
Vladislav
Ну чет GoLand не могет, или я его еще не научился готовить
Умеет. Сходу не припомню как включить.
Alexander
Нашел вот такое
Alexander
Alexander
Видимо надо поизучать поглубже, спасибо
Stepan
var i int var results []string for data := range in { fmt.Println(i) results[i] = data.(string) i++ }
Stepan
Печатает 0 и выдает index out of range
Stepan
Вопрос, в чем я ошибся?
Владимир
А зачем вы индекс самостоятельно увеличиваете, если можно for i, data := range in?
Stepan
too many variables in range
Stepan
Если сделать как вы сказали
Владимир
а вы вокруг чего делаете range?
Stepan
А ну да
Stepan
Это же канал
Stepan
Все верно
Stepan
У него нет индекса
Stepan
Так вопрос был в том почему у меня валится цикл на 0 элементе слайса
Владимир
В слайс надо append
Владимир
А вы как map[int]string добавляете
Stepan
Понял
Stepan
Спасибо
Владимир
в мапе можно resul[i] = ololo, а в слайс надо slice = append(slice, ololo)
Vadim
У него нет поинтера на какой-нибудь массив.
Stepan
Я уже понял что фигню сморозил
Stepan
Что он пустой
Vadim
Попробуйте или через make, или results []string{}. Поинтер на пустой массив
Stepan
Так можно было бы делать если бы я создавал массив
Vadim
Да
Stepan
Я это понимаю
Stepan
Затупил)
Vadim
👍
Stepan
Теперь бы еще с дедлоками разобраться)
Vadim
Теперь бы еще с дедлоками разобраться)
Если все горутины заблокированы(ждут что-то из канала), то наступает deadlock.
Stepan
Понять бы почему)
Stepan
Если все горутины заблокированы(ждут что-то из канала), то наступает deadlock.
А получается если мы закроем канал из которого они ждут, то и они закроются?)
Vadim
А получается если мы закроем канал из которого они ждут, то и они закроются?)
Нет, вам будут присылаться дефолтные значения каждого типа.
Vadim
Если тип канал int, то 0, если string, то "".
Stepan
А как тогда правильно поступать?
Vadim
Чтобы проверить закрыт канал или нет, можно использовать такую структуру: Value, ok := <- chan int.
Vadim
Если ok будет false, то значит что канал закрыт
Stepan
Ааааа
Stepan
Вот это я затупил
Vadim
Также, вы можете использовать цикл for each для чтения из канала. Когда канал будет закрыт и в его буфере не будет значений, программа выйдет из цикла.
Vadim
Это получается в бесконечном цикле?
Если я правильно понимаю контекст, то да
Vadim
Stepan
С каналами для меня самая сложная тема наверное
Vadim
Канал по сути очередь данных. Одни горутины в эту очередь данные закидывают, другие горутины забирают.
Vadim
https://gobyexample.com/range-over-channels
For each работает до тех пор, пока есть данные в канале и канал не закрыт, после происходит выход из цикла. Если же вы просто берёте данные из закрытого канала, то вам будут возвращаться дефолтные значения.
Stepan
Посмотри https://gobyexample.com/range-over-channels
Stepan
Тут пишут что если закрыть канал то и for-range закрыться должен
Vadim
Посмотри https://gobyexample.com/range-over-channels
Да, он закроется, но только после того как в канале не останется сообщений.
Vadim
Тогда используйте foreach
Nazar
???? 10к строчек это мало???
Nazar
https://m.habr.com/post/308198/
Nikita
???? 10к строчек это мало???
Ну не сказать, чтобы много.
Nazar
Ну не сказать, чтобы много.
Ну для одного файла имхо много
Nazar
Очень