Alexandr
ок
Anonymous
хмм, не очень понимаю, в чем именно вопрос, на 36 строке создается небуферизированый канал, на 39 в него передают аргумент, если это делать не в горутине, на этом программа зависнет, тк из канала никто не читает
Вероятно, вопрос в том, - зачем писать это именно в горутину, когда можно написать на той же строчке и без неё. Точно так же произойдёт чтение же.
Daniel
в каком смысле он освободится?
Илья
канал небуферизирванный, программа остановится на записи, пока не будет читающей стороны
Anonymous
да, вопрос в этом
Канал не освободится. на момент 39 строки ещё никто его не слушает
Anonymous
как это не пишет? если на 39 строке будет написано без горутины просто worklist <- os.Args[1😏 это и есть запись
Daniel
да, и она встанет навсегда, потому, что читать-то некому
Anonymous
Если же она будет в отдельной горутине, то "зависнет" та горутина отдельная, а не текущая программа.
Anonymous
всмысле, зависнет, пока в текущей программе не будет осуществлено чтение из канала на 43 строке
Daniel
можно пользоваться термином "заблокируется"
Alexandr
канал небуферизирванный, программа остановится на записи, пока не будет читающей стороны
вот этот момент от меня ускользнул. То есть если канал не буфферизированный то при записи в него(даже если канал пуст) поток исполнения заблокируется а после чтения горотиной из этого канала то поток продолжит исполнение?
Anonymous
да.
Илья
exactly
Илья
и вы словите панику all goroutines are asleep - deadlock!
Alexandr
я почему то считал что в канал можно писать без блокировки пока в нем есть место. даже в небуфферизированный...
Anonymous
я тоже сначала не понял прикола. пишу так: ch <- 123 <-ch на первой же строке дедлок, потому что когда я пишу в канал, никто не слушает. Я начинаю менять местами <-ch ch <- 123 Опять дедлок на первой же строке, потому что в канал никто ещё не пишет ))
Alexandr
в небуферизованном нет места
то есть если создать канал make(chan []string, 1) то проблемы с блокировкой уже не будет?
Илья
Да
Daniel
на второй записи, или на втором чтении - опять будут
Alexandr
я понял. Спасибо Вам большое!
Daniel
вообще, буферизованный канал довольно специальная вещь
Daniel
он нужен в одном случае: если у вас писатели пишут в среднем медленнее, чем читатели читают, но в пиках - быстрее.
Anonymous
коллеги, если данные float размаршилливаются в структуру и показываются в scientific нотации с "е", есть возможность сделать так чтобы они не меняя типа хранились и показывались нормально? Или никак, только на этапе представления данных что-то делать?
Daniel
показываются - это превращаются в строку?
Anonymous
нет, показываются это показываются
Anonymous
они показываются как 6.1e-07 а я хочу 0.00000000061
Илья
где показываются?
Anonymous
fmt.Println()
Илья
показывайте через fmt.Printf
Илья
fmt.Printf("g for Float: %g\n", c) fmt.Printf("e for Scientific Notation: %e\n", d) fmt.Printf("E for Scientific Notation: %E\n", d)
Anonymous
👍
Daniel
нет, показываются это показываются
коллега, это и есть превращаютс в строку. хорошо бы вам это понимать, чтобы таких смешных вопросов больше не задавать
Anonymous
да, верно.
Илья
если все же хочется тупо скармливать в println то нужно сделать свой тип из float и реализовать метод String()
Anonymous
Это не проблема, я просто сглупил на ерунде.
WaveCut
мимо))
Cat
Гугли что такое deployment и replicas
Мерль, ты pijul пользовал?
Anonymous
Гугли что такое deployment и replicas
мой вопрос заключался в том, как сделать несколько deployment в цикле. исходя из этого я знаю что такое deployment. кол-во реплик не причем. если что, ответ на мой вопрос такой: в цикле перед или после каждого deployment необходимо задать разделительно нового документа - 3 дефиса, это позволит в рамках одного файла задать несколько документов deployment...
Мерль
Мерль, ты pijul пользовал?
Немного тыкал палочкой
Cat
Немного тыкал палочкой
Смог запушить на их гитхаб?
Cat
Ясно понятно
lynx
Всем привет. У коллеги в коде встретил content = content[:0] далее по коду content не используется. statickcheck отловил это дело. А мне коллега говорит, что он урезая массив он память экономит. Что тут не то, согласны?
Pauline
как-то не очень вежливо
Dmitry
память экономится, если обнулять длину слайса, а потом в него заново добавлять элементы (при условии что вы не вылезите за capacity), в таком случае переиспользуетя низлежащий массив и не тратятся ресурсы на создание нового массива и на GC старого массива
Anonymous
ребят, а что вот это значит: go listen(arg1) зачем тут go? 🙂 я бы в тыртырнетах спросил, да не доходит до меня как правильно спросить..(
Ivan
Гугли "горутина"
Anonymous
сяп
Andrey
А если tour of go пройти - таких вопросов не будет
Дань это сложно видимо, легче спросить, я так полагаю
Anonymous
коллеги, подскажите, как правильно сделать. Есть функция, она должна принимать на вход различные структуры, разбирать их свойства, делать из них json и отправлять куд-то. Сложность в том, что мы должны задать конкретный тип для аргумента данной функции. Не пойму, как заставить принимать _различные_ структуры. Сейчас сделано коряво - аргументом служит мапа интерфейсов. Хочу избавиться от мапы.
Anonymous
Есть ли какой-то путь более правильноый кроме interface{} как аргумент для функции?
Max
Есть ли какой-то путь более правильноый кроме interface{} как аргумент для функции?
Почему бы не отнаследовать их все от одного класса и передавать базовый...🤔 Но по сути, это interface{}
Anonymous
)))
Max
потому, что в go нет наследования, бро
Не ну ... Тут же есть типо реализации интерфейса...
Daniel
есть
Max
Ну я думаю меня поняли
Max
Daniel
теперь - да
Daniel
так вот, определяется интерфейс с методом ToJSON()
Max
Ох уж эти шарповые синтаксисы, проф. деформация