Васильев Виктор
Это будет тоже ок если у тебя Limit будет возвращать ссылку на самого себя
Васильев Виктор
ну как бы да...значение и не будет модифицировать ничего соответственно ничего и не получится
Васильев Виктор
возвращая значение ты отдаешь копию объекта и работаешь с ней
Васильев Виктор
соответственно объект у тебя не меняется и ты пложишь паравоз копий которые выбрасываются по окончанию
Васильев Виктор
Да и как бы зачем отдавать копии то? Чейнинг же делается по ссылкам. Это и быстрее и работает как и задуманно и лишнюю память не выделяет
heavycharged
Не понял, допустим, в первом примере, мой Limit возвращает по значению. Затем, я вызываю метод, определенный на ссылочном типе, и конпелятор это понимает (dereference или что это). Если я пишу паравоз, то после cities.Limit(50) опять же возвращается по значению, и уже на этом значении я вызываю SearchByName(). Технически же ничего не поменялось, это просто какое-то ограничение компилятора?
Pawel
ну да, это ж так сложно понять, что если метод (v Values) то v по значению
Pawel
не все прошли tour of go, хотя следовало бы - а всё туда же
heavycharged
причем тут tour of go. я скинул два варианта. первый работает, второй нет. в tour of go ничего нету про паравозы.
heavycharged
в Limit возвращается структура по значению, а не указатель.
heavycharged
cannot take the address of cities.Limit(50)
heavycharged
я видимо не очень понимаю как работают паравозы, я думал, что сначала выполняется эта конструкция, а затем на том что она вернула вызывается следующий метод. зачем оно пытается взять адрес метода?
Daniel
так вот
Daniel
если ваша функция возвращает значение - нет способа взять от этого значения указатель без промежуточной переменной
Daniel
аминь
heavycharged
heavycharged
Ладно, спасибо за пояснения
NeМакс
Всем привет! Кто нибудь подскажите я не могу понять почему так происходит.
NeМакс
Сейчас скину код
NeМакс
for _, cat := range cats { for _, url := range links { if cat != url.ParentCat { continue } log.Printf("UP %s - DOWN %s", cat, url.ParentCat) } }
Илья
что происходит?
NeМакс
Есть два цикла. Второй цикл надо заканчивать по условию, если строки не совпадают и переходить к первому циклу. Я использовал break и в итоге цикл вообще перестал работать. А с continue работает
NeМакс
То есть на следующих итерациях первого цикла второй сразу завершается
Илья
у вас с логикой тут проблемы, помоему, а не с break/continue
Илья
понятия не имею, я не знаю что вы делаете, и что хотите получить
Илья
сделайте пример простой на playground
Илья
может сами поймете, где у вас ошибка
heavycharged
golang labels ищите
heavycharged
вам нужно второй цикл обозвать как то
NeМакс
понятия не имею, я не знаю что вы делаете, и что хотите получить
cat - массив строк, url - массив определенной структуры, где ParentCat - строка. В условии cat и ParentCat совпадают. Это родительские категории
heavycharged
на этом нужно прервать второй цикл, если совпали?
NeМакс
Ага. Чтобы дальнейшее выполнение прекратилось, после идет список с другими категориями или есть шанс что массив будет собран не в том порядке и лучше использовать continue?
NeМакс
golang labels ищите
За это огромное спасибо впервые слышу
heavycharged
https://play.golang.org/p/l7D9U_YyeJM
NeМакс
https://play.golang.org/p/l7D9U_YyeJM
Да я статью прочитал, спасибо)
NeМакс
Удобно
Илья
@heavycharged преклоняюсь перед уровнем телепатии
NeМакс
@heavycharged преклоняюсь перед уровнем телепатии
да но оно не работает я сделал с continue 😄
NeМакс
я сам непонимаю что происходит
Илья
вы не понимаете, что вам нужно сделать
Илья
еще раз, соберите пример из foo bar на playground, и разберитесь с логикой того, что вы хотите получить
NeМакс
вы не понимаете, что вам нужно сделать
Я понимаю) Это костыль. Пока не знаю как его переписать. Есть рабочий цикл с массивом структур links который содержит данные для оперирования. Массив выше cats использую только для продолжения цикла links который я прерываю если категории не совпадают.
Илья
вы соберите пример на playground
Илья
я за вас это делать не буду :)
NeМакс
это сложно xD
NeМакс
пошел думать
Dmitry
Dmitry
айдееха все подсвечивает
NeМакс
айдееха все подсвечивает
вообще дело не в этом)
NeМакс
с continue то всё правильно работает x)
Dmitry
heavycharged
@kagemakkusu хотя там labels не нужны, если вы вложенный цикл пытаетесь прервать, можно простой брейк.
heavycharged
как вам тут выше описали
NeМакс
Айдееха подсвечивает какой брейк что прерывает
Ага. Логично что она мой второй цикл прерывает
heavycharged
labels нужны чтобы достучаться до циклов снаружи.
NeМакс
как вам тут выше описали
да я понял по статьям, что используют, чтобы избежать всяких found = true
NeМакс
У меня в других проектах также было) Надо переписать
heavycharged
да, верно.
Anonymous
У меня компилятор не видит соседние main пакеты
Anonymous
как это пофиксить?
Anonymous
т.е. если main разбит на несколько go файлов то не компилируется прога
Daniel
а?!
Daniel
конечно, компилируется
Anonymous
конечно, компилируется
нет, он не видит функции и типы в других файлах
Daniel
вот go run видит только указанные файлы
Aleksandr
нет, он не видит функции и типы в других файлах
не надо в main размещать. в пакеты переложи
Daniel
а go build получает на вход пакет или директорию. и видит все
Daniel
не надо в main размещать. в пакеты переложи
это хороший совет, но так и не поймет же ничего этот юный падаван
Anonymous
а go build получает на вход пакет или директорию. и видит все
рили, если просто go build написать то скомпилил
Anonymous
не надо в main размещать. в пакеты переложи
не хочу, в мейне удобнее мне
Aleksandr
не хочу, в мейне удобнее мне
так и скажешь на собеседовании
Anonymous
у меня там не супер огромный проект
Daniel
не надо спорить, пожалуста
Daniel
а то мы озвереем
Aleksandr
у меня там не супер огромный проект
не такой большой, чтобы создать еще одну директорию?
Daniel
просто идите, и запускайте go run *.go