@gogolang

Страница 860 из 1630
Sergey
25.02.2018
12:04:46
Кто нибудь уже использовал либу github.com/graphql-go/graphql? Как узнать что в запросе в groups используется modules? query{ groups{ id name modules{ id name } } }

Timur
25.02.2018
13:48:07
Modules предлагается загружать отдельно

Для этого вы опишите обработчик для modules

Google
Timur
25.02.2018
13:49:24
И получите туда source в виде родительского объекта group

Timur
25.02.2018
14:05:12
Но это печальный подход

n+1 запросов

Избыточный лукап данных

Мы пошли путем query builder, promise, etc..

BlackTrojan
25.02.2018
14:22:47
Саламуля пацанва. Посоветуйте плагинов для Sublime Text 3 для разработки на Go.

Timur
25.02.2018
14:33:55
GoSublime

BlackTrojan
25.02.2018
14:39:51
GoSublime
С ним есть небольшая (а может и большая) проблема, что он не видит методы/структуры/и т.д у библиотек, которые были импортированы через gb vendor fetch, есть ли фикс к этому?



Timur
25.02.2018
14:41:30
Тогда вам в goland

Все няшки там

Andrey
25.02.2018
14:54:18
А есть где в одном месте список всех базовых интерфкйсов?

Google
BlackTrojan
25.02.2018
15:00:26
export GOPATH=$PWD:$PWD/vendor не помог?
Чуть позже попробую и отпишусь, только вопрос - что за PWD?

Roman
25.02.2018
15:00:48
Текущая папка

Вернее полный путь

BlackTrojan
25.02.2018
15:03:24
И ещё вопрос - создал тестовый проект, пробую его скомпилить с помощью gb build all и просто gb build, вроде всё проходит, но где сам-то бинарник?

В самой папке проекта не создаётся папка bin

BlackTrojan
25.02.2018
15:05:40
Где запустил go build, в том же каталоге и бинарник
Я запускал в самом пакете (src/mypackage) и просто в папке проекта, но нигде нет этого бинарника

Andrew
25.02.2018
15:07:55
Не нашёл в истории что такое gb...

Artem
25.02.2018
15:12:31
чет у меня голова не соображает сегодня. нужно переставить последний элемент слайса в начало, есть какой то канонический способ? то, что у меня получилось чет даже самого пугает. func swap(s *[]int) { l := len((*s)) - 1 (*s) = append([]int{(*s)[l]}, (*s)[:l]...) }

Alexey
25.02.2018
15:19:26
s = append([]int{s[len(s)-1:len(s)-1]}, s[1:len(s)-2]...)

Artem
25.02.2018
15:22:43
s = append([]int{s[len(s)-1:len(s)-1]}, s[1:len(s)-2]...)
чет я это не понял. оно вообще может работать?

это тоже фигня

Alexey
25.02.2018
15:27:11
Незнаю :) ща проверим

Artem
25.02.2018
15:27:26
во первых длина динамическая

во вторых тут s[1:len(s)-2] почему то пропускается первый элемент и предпоследний или я че то не догоняю

а тут s[len(s)-1:len(s)-1] срез не нужен, s[len(s)-1] это уже последний элемент. вот к нему нужно приапендить s[:len(s)-1], последний же не включается, но суть я понял, наверно никак иначе...

Aleksandr
25.02.2018
15:32:21
а чем s[0], s[len - 1] = s[len - 1], s[0] не угодило?

Alexey
25.02.2018
15:33:18
s = append(s[len(s)-1 : ], s[:len(s)-1]...)

Google
Alexey
25.02.2018
15:34:16
Ну и то что я последнее кинул работает

Artem
25.02.2018
15:37:51
s = append(s[len(s)-1 : ], s[:len(s)-1]...)
кстати да там же в первом срез возвращается, так будет куда лучше

а чем s[0], s[len - 1] = s[len - 1], s[0] не угодило?
и что по вашему это изменит значения s[0] и s[-1] в оригинальном слайсе?

Alexey
25.02.2018
15:40:15
https://play.golang.org/p/ATPecxcjpAP

Artem
25.02.2018
15:42:30
https://play.golang.org/p/JcNeehrKwbu
вы выполните первый пример и посмотрите что он делает, перывй элемент должен сместиться с 0 на 1, последний идет в начало, а порядок остальных сохраняется

Aleksandr
25.02.2018
15:43:53
ну ок, тогда вам сюда https://play.golang.org/p/ATPecxcjpAP

BlackTrojan
25.02.2018
15:46:20
Artem
25.02.2018
15:48:13
ну ок, тогда вам сюда https://play.golang.org/p/ATPecxcjpAP
да вот только чтобы сделать это в ф-ии и придется использовать передачу по ссылке и разыменовывание, разве что от конструкции []int{(*s)[l]} можно избавиться, что собственно тоже не мало.

Artem
25.02.2018
15:52:46
в общем если кто знает способ лучше, https://play.golang.org/p/WQ-nBHyBEKp -делитесь :)

Andrew
25.02.2018
16:11:13
Для l не выделять память
И сделать код нечитаемым ))

Artem
25.02.2018
16:11:31
Для l не выделять память
тогда придется ее дважды вызывать как минимум и продублировать хрень которую итак читать нереально

Alexey
25.02.2018
16:12:57
Что ж тут не читаемого? (*s) = append((*s)[len((*s)) - 1:], (*s)[:len((*s)) - 1]...)

Можно: (*s) = append((*s)[ (len((*s))-1) : ], (*s)[ : (len((*s))-1) ]...)

Andrew
25.02.2018
16:16:32
Zloy Dobriy
25.02.2018
16:17:10
Пиздец

Google
Zloy Dobriy
25.02.2018
16:17:19
Что вы тут устроли?!

(*s) = это зачем так? Что это значит?

Artem
25.02.2018
16:17:44
Можно: (*s) = append((*s)[ (len((*s))-1) : ], (*s)[ : (len((*s))-1) ]...)
еще пару скобок и получится lisp ))

(*s) = это зачем так? Что это значит?
знаете другой способ ?))))

это называется разыменовывание указателя.. точнее я так называю и за это его принимаю, а как на самом деле хз )

Alexey
25.02.2018
16:18:31
еще пару скобок и получится lisp ))
Это не я первый начал ))

Artem
25.02.2018
16:19:12
(*s) = это зачем так? Что это значит?
слайс в ф-ию передается по &, и если указать тип, как *[]int, индексация будет недоступна

Alexey
25.02.2018
16:21:44
Я бы вообще сделал свой тип слайс и метод у него

Admin
ERROR: S client not available

Zver
25.02.2018
16:22:05
А я бы вообще сдвигал все элементы. Все равно приходится копировать слайс полностью.

Не будет тогда выделения памяти.

Artem
25.02.2018
16:23:28
Я бы вообще сделал свой тип слайс и метод у него
можно, но это не особо суть меняет, просто будет slice.swap(el1, el2) вызов усложнится. Точнее будет slice.swap(element), вот если указывать 2 элемента для свопа тогда да наверно через метод лучше

А я бы вообще сдвигал все элементы. Все равно приходится копировать слайс полностью.
я думал сначала о сдвиге, но память это одно, да и если там слайс на пару миллионов, а увеличение размера удваивает его, еще не известно что лучше. Но наверно нужно будет потестировать

хотя все равно все элементы перебираются. может сразу пустое место зарезервировать и все

Zver
25.02.2018
16:30:17
я думал сначала о сдвиге, но память это одно, да и если там слайс на пару миллионов, а увеличение размера удваивает его, еще не известно что лучше. Но наверно нужно будет потестировать
Но когда вы делаете append все равно происходит копирование всего слайса. Единственное копирование может быть более оптимизированным в append. А так, да, запустите тест, посмотрите.

Alexey
25.02.2018
16:37:29
func swap(s *[]int) { n := (*s)[len((*s))-1] copy((*s)[1:], (*s)[0:len((*s))-1]) (*s)[0] = n }

Alexey
25.02.2018
16:38:30
https://play.golang.org/p/-6cVcSWbzYE

Выделение только одного инта

Zver
25.02.2018
16:39:50
https://play.golang.org/p/-6cVcSWbzYE
тоже о copy сейчас подумал, глядя в документацию.

Google
Alexey
25.02.2018
16:41:54
Неудобно на телефоне... почему то не всегда ссылку с плэйголанга скопировать удаётся

Zver
25.02.2018
16:44:57
Неудобно на телефоне... почему то не всегда ссылку с плэйголанга скопировать удаётся
Можно и не по ссылке передавать. Так как изменения только внутри слайса. https://play.golang.org/

Alexey
25.02.2018
16:45:45
бэнчмарки сделать нужно

Artem
25.02.2018
16:45:54
бэнчмарки сделать нужно
https://gist.github.com/xogeny/b819af6a0cf8ba1caaef

там все довольно спорно и есть в конце ссылка на продолжение, в любом случае нужно на конкретном примере тестировать и смотреть что в итоге будет лучше. Но да так тоже интересно.

Alexey
25.02.2018
16:47:23
По памяти бэнчмарки

Artem
25.02.2018
16:48:25
По памяти бэнчмарки
мы же в 2018 году, тут память не то чтобы совсем критична :)

Alexey
25.02.2018
16:49:38
Да? Дело ещё в скорости её выделения и уборки потом гб

Zver
25.02.2018
16:57:39
Artem
25.02.2018
16:58:19
Тестировал на 100к примерно, больше вряд ли нужно. Но мало ли )

И там числа в пределах 10^5 внутри

Alex
25.02.2018
17:21:59
коллеги, драйвер для кликхауса посоветуйте пожалуйста, желательно http, а то на гитхабе их целый зоопарк, не уверен с которым стоит связываться

Alex
25.02.2018
17:22:53
там я тоже спросил

Zver
25.02.2018
17:49:05
Тестировал на 100к примерно, больше вряд ли нужно. Но мало ли )
BenchmarkCopy-4 20000 93049 ns/op 40 B/op 0 allocs/op BenchmarkAppend-4 5000 272002 ns/op 802986 B/op 2 allocs/op BenchmarkAppendPreallocate-4 5000 346201 ns/op 802976 B/op 1 allocs/op Получается с Copy намного быстрей.

Artem
25.02.2018
17:50:18
да как то даже слишком

Zver
25.02.2018
17:51:16
да как то даже слишком
А архиве сам бенч, может что-то упустил.

Artem
25.02.2018
17:54:08
А архиве сам бенч, может что-то упустил.
да вроде все верно, возможно из за операций с указателями потери, все же не должны они так сильно отличаться

Zver
25.02.2018
17:55:30
да вроде все верно, возможно из за операций с указателями потери, все же не должны они так сильно отличаться
Выделение памяти наверное столько отжирает, до сборщика мусора не уверен, что доходит за время теста.

Страница 860 из 1630