Fedor
ENV
Je
какая разница, viper все умеет, идеально из env подсасывать
Alexander
ENV
типо через переменные окружения? а если их 25?
Fedor
А какая разница, в bashrc кинул и забыл
Mike
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.
те чтобы юзать енвы, надо еще понимать, что всегда работаем с корнем конфига, что отсекает часть функционала вайпера
Vladislav
Alexander
Alexander
Ну чет GoLand не могет, или я его еще не научился готовить
Vladislav
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
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
Vadim
У него нет поинтера на какой-нибудь массив.
Stepan
Я уже понял что фигню сморозил
Stepan
Что он пустой
Vadim
Попробуйте или через make, или results []string{}. Поинтер на пустой массив
Stepan
Так можно было бы делать если бы я создавал массив
Vadim
Да
Stepan
Я это понимаю
Stepan
Затупил)
Vadim
👍
Stepan
Теперь бы еще с дедлоками разобраться)
Stepan
Stepan
Понять бы почему)
Vadim
Vadim
Если тип канал int, то 0, если string, то "".
Stepan
А как тогда правильно поступать?
Vadim
Чтобы проверить закрыт канал или нет, можно использовать такую структуру: Value, ok := <- chan int.
Vadim
Если ok будет false, то значит что канал закрыт
Stepan
Ааааа
Stepan
Вот это я затупил
Vadim
Также, вы можете использовать цикл for each для чтения из канала. Когда канал будет закрыт и в его буфере не будет значений, программа выйдет из цикла.
Stepan
Stepan
Vadim
Stepan
С каналами для меня самая сложная тема наверное
Stepan
Vadim
Канал по сути очередь данных. Одни горутины в эту очередь данные закидывают, другие горутины забирают.
Vadim
https://gobyexample.com/range-over-channels
For each работает до тех пор, пока есть данные в канале и канал не закрыт, после происходит выход из цикла. Если же вы просто берёте данные из закрытого канала, то вам будут возвращаться дефолтные значения.
Stepan
Посмотри https://gobyexample.com/range-over-channels
Stepan
Тут пишут что если закрыть канал то и for-range закрыться должен
Stepan
Vadim
Тогда используйте foreach
Nazar
???? 10к строчек это мало???
.
Nazar
https://m.habr.com/post/308198/
Daniel
Nazar
Очень