Roman
Текущая папка
Roman
Вернее полный путь
Anonymous
И ещё вопрос - создал тестовый проект, пробую его скомпилить с помощью gb build all и просто gb build, вроде всё проходит, но где сам-то бинарник?
Anonymous
В самой папке проекта не создаётся папка bin
Anonymous
Anonymous
Anonymous
Не нашёл в истории что такое gb...
Artem
чет у меня голова не соображает сегодня. нужно переставить последний элемент слайса в начало, есть какой то канонический способ? то, что у меня получилось чет даже самого пугает.
func swap(s *[]int) {
l := len((*s)) - 1
(*s) = append([]int{(*s)[l]}, (*s)[:l]...)
}
Aleksey
s = append([]int{s[len(s)-1:len(s)-1]}, s[1:len(s)-2]...)
Artem
Artem
это тоже фигня
Aleksey
Незнаю :) ща проверим
Artem
во первых длина динамическая
Artem
во вторых тут s[1:len(s)-2] почему то пропускается первый элемент и предпоследний или я че то не догоняю
Artem
а тут s[len(s)-1:len(s)-1] срез не нужен, s[len(s)-1] это уже последний элемент. вот к нему нужно приапендить s[:len(s)-1], последний же не включается, но суть я понял, наверно никак иначе...
Alexander
а чем s[0], s[len - 1] = s[len - 1], s[0] не угодило?
Aleksey
s = append(s[len(s)-1 : ], s[:len(s)-1]...)
Chebyrash
Aleksey
Aleksey
Ну и то что я последнее кинул работает
Alexander
Aleksey
https://play.golang.org/p/ATPecxcjpAP
Artem
Artem
https://play.golang.org/p/JcNeehrKwbu
вы выполните первый пример и посмотрите что он делает, перывй элемент должен сместиться с 0 на 1, последний идет в начало, а порядок остальных сохраняется
Alexander
ну ок, тогда вам сюда https://play.golang.org/p/ATPecxcjpAP
Anonymous
Artem
в общем если кто знает способ лучше, https://play.golang.org/p/WQ-nBHyBEKp -делитесь :)
Aleksey
Artem
Для l не выделять память
тогда придется ее дважды вызывать как минимум и продублировать хрень которую итак читать нереально
Aleksey
Что ж тут не читаемого?
(*s) = append((*s)[len((*s)) - 1:], (*s)[:len((*s)) - 1]...)
Aleksey
Можно:
(*s) = append((*s)[ (len((*s))-1) : ], (*s)[ : (len((*s))-1) ]...)
Anonymous
Zloy-Dobry
Пиздец
Zloy-Dobry
Что вы тут устроли?!
Zloy-Dobry
(*s) = это зачем так? Что это значит?
Artem
Artem
Artem
это называется разыменовывание указателя.. точнее я так называю и за это его принимаю, а как на самом деле хз )
Aleksey
Aleksey
Я бы вообще сделал свой тип слайс и метод у него
Zver
А я бы вообще сдвигал все элементы. Все равно приходится копировать слайс полностью.
Zver
Не будет тогда выделения памяти.
Artem
Я бы вообще сделал свой тип слайс и метод у него
можно, но это не особо суть меняет, просто будет slice.swap(el1, el2) вызов усложнится. Точнее будет slice.swap(element), вот если указывать 2 элемента для свопа тогда да наверно через метод лучше
Artem
хотя все равно все элементы перебираются. может сразу пустое место зарезервировать и все
Zver
Aleksey
func swap(s *[]int) {
n := (*s)[len((*s))-1]
copy((*s)[1:], (*s)[0:len((*s))-1])
(*s)[0] = n
}
Anonymous
Aleksey
https://play.golang.org/p/-6cVcSWbzYE
Aleksey
Выделение только одного инта
Aleksey
Неудобно на телефоне... почему то не всегда ссылку с плэйголанга скопировать удаётся
Aleksey
бэнчмарки сделать нужно
Artem
там все довольно спорно и есть в конце ссылка на продолжение, в любом случае нужно на конкретном примере тестировать и смотреть что в итоге будет лучше. Но да так тоже интересно.
Aleksey
По памяти бэнчмарки
Aleksey
Да? Дело ещё в скорости её выделения и уборки потом гб
Zver
Artem
Тестировал на 100к примерно, больше вряд ли нужно. Но мало ли )
Artem
И там числа в пределах 10^5 внутри
Alexey
коллеги, драйвер для кликхауса посоветуйте пожалуйста, желательно http, а то на гитхабе их целый зоопарк, не уверен с которым стоит связываться
Nik
Nik
Спроси там, им виднее
Alexey
там я тоже спросил
Zver
Artem
да как то даже слишком
Zver
Aleksey
Странно что с copy 0 алокаций и при этом 40 байт на операцию, там переиспользуется что ли память