@proGO

Страница 350 из 1674
Kirill
20.12.2016
14:43:43
ну нафиг

я лучше упорюсь и сделаю многопоточность без блокировок

@tokenizer мне в помощь

Alexei
20.12.2016
14:44:45
сделай структуру данных, которая повторит ассоциативный массив и организуй в ней мьютексный доступ на уровне ключа

Google
Kirill
20.12.2016
14:45:00
не хочу

говорю же, я не хочу никаких блокировок

и в гошке не хотели, когда мой proposal развернули

но тогда я не знал, как сделать иначе

при evacuate(), который во время growWork

а вы знали, что код Go не проходит go vet?

Sergey
20.12.2016
14:58:46
атом?

Kirill
20.12.2016
14:58:52
конечно

Sergey
20.12.2016
14:59:07
у меня что-то не взлетел

vs code как-то приятнее, ИМХО

Kirill
20.12.2016
14:59:15
значит, что-то не так делал :)

Sergey
20.12.2016
14:59:39
ну, там сложно делать что-то не так

Google
Kirill
20.12.2016
14:59:50
довольно просто

плагины не те заюзать, например

надо будет свой список плагинов выложить

Alexei
20.12.2016
15:01:42
сегодня обновились плагины и у меня на трех линуксах отлетел GOPATH в атоме, зато он в настройке go-plus появился

мне больше всего сейчас атом для го нравится, да и для других яп, тоже, кроме джава-подобий

Kirill
20.12.2016
15:02:49
плюсую

Sergey
20.12.2016
16:02:13
надо будет свой список плагинов выложить
во, кстати, да покажи, вдруг действительно что-то у меня не то

Kirill
20.12.2016
16:05:23
во, кстати, да покажи, вдруг действительно что-то у меня не то
Community Packages (51) /home/kirilldanshin/.atom/packages ├── atom-clock@0.0.8 ├── atom-material-syntax@0.4.6 ├── atom-material-syntax-dark@0.2.5 ├── atom-material-syntax-light@0.4.5 ├── atom-material-ui@1.3.6 ├── autocomplete-go@1.3.0 ├── bezier-curve-editor@0.7.2 ├── build-elixir@0.6.0 ├── chester-atom-syntax@0.1.1 ├── color-picker@2.2.2 ├── css-snippets@1.1.0 ├── editor-background@1.2.27 ├── editorconfig@2.0.4 ├── environment@1.3.1 ├── es6-javascript@1.0.0 ├── file-icons@1.7.24 ├── go-config@1.2.4 ├── go-get@2.1.1 ├── go-outline@0.6.1 ├── gofmt@1.2.0 ├── gometalinter-linter@1.2.2 ├── gotests@0.2.5 ├── improved-chester-atom-syntax@0.2.0 ├── javascript-snippets@1.2.1 ├── language-babel@2.48.5 ├── language-elixir@0.16.0 ├── language-hjson@0.3.0 ├── language-quicktemplate@1.0.0 ├── language-rust@0.4.8 ├── language-svg@0.9.0 ├── language-x86@1.0.1 ├── language-x86-64-assembly@2.2.8 ├── language-x86asm@0.8.0 ├── linter@1.11.18 ├── linter-csslint@1.3.3 ├── linter-eslint@8.0.0 ├── linter-flow@5.5.0 ├── linter-golinter@1.2.1 ├── linter-rust@0.7.0 ├── linter-write-good@0.8.0 ├── markdown-preview-plus@2.4.0 ├── nord-atom-syntax@0.4.0 ├── nord-atom-ui@0.9.0 ├── qolor@0.4.0 ├── steam-pirate-ui@0.6.1 ├── svgo@2.6.0 ├── term@0.2.4 ├── terminal-plus@0.14.5 ├── tidy-markdown@3.0.1 ├── tokamak-terminal@0.1.2 └── vivid@1.1.8

Sergey
20.12.2016
16:10:16
Community Packages (51) /home/kirilldanshin/.atom/packages ├── atom-clock@0.0.8 ├── atom-material-syntax@0.4.6 ├── atom-material-syntax-dark@0.2.5 ├── atom-material-syntax-light@0.4.5 ├── atom-material-ui@1.3.6 ├── autocomplete-go@1.3.0 ├── bezier-curve-editor@0.7.2 ├── build-elixir@0.6.0 ├── chester-atom-syntax@0.1.1 ├── color-picker@2.2.2 ├── css-snippets@1.1.0 ├── editor-background@1.2.27 ├── editorconfig@2.0.4 ├── environment@1.3.1 ├── es6-javascript@1.0.0 ├── file-icons@1.7.24 ├── go-config@1.2.4 ├── go-get@2.1.1 ├── go-outline@0.6.1 ├── gofmt@1.2.0 ├── gometalinter-linter@1.2.2 ├── gotests@0.2.5 ├── improved-chester-atom-syntax@0.2.0 ├── javascript-snippets@1.2.1 ├── language-babel@2.48.5 ├── language-elixir@0.16.0 ├── language-hjson@0.3.0 ├── language-quicktemplate@1.0.0 ├── language-rust@0.4.8 ├── language-svg@0.9.0 ├── language-x86@1.0.1 ├── language-x86-64-assembly@2.2.8 ├── language-x86asm@0.8.0 ├── linter@1.11.18 ├── linter-csslint@1.3.3 ├── linter-eslint@8.0.0 ├── linter-flow@5.5.0 ├── linter-golinter@1.2.1 ├── linter-rust@0.7.0 ├── linter-write-good@0.8.0 ├── markdown-preview-plus@2.4.0 ├── nord-atom-syntax@0.4.0 ├── nord-atom-ui@0.9.0 ├── qolor@0.4.0 ├── steam-pirate-ui@0.6.1 ├── svgo@2.6.0 ├── term@0.2.4 ├── terminal-plus@0.14.5 ├── tidy-markdown@3.0.1 ├── tokamak-terminal@0.1.2 └── vivid@1.1.8
да вродь похоже

но спасибо

Maxim
20.12.2016
16:30:16
Чёт внезапно решил заспидранить разработку новой библиотеки. С 0 до места в списке AwesomeGo: https://www.livecoding.tv/toby3d/

Andrey
20.12.2016
16:38:01
круто! имхо нужно стримов по программированию

Andrey
20.12.2016
16:40:45
+1 стрим по гошечки под пивко, лучший вечер :)

Sergey
20.12.2016
17:02:23
И тебе привет)

Quet
20.12.2016
17:11:56
Quet
20.12.2016
17:12:48
блокировки? )

Kirill
20.12.2016
17:13:21
ни в коем случае

это крайняя мера

Quet
20.12.2016
17:14:18
все равно ж этот “ряд изменений” сделает мап медленнее при однопоточном использовании

Google
Kirill
20.12.2016
17:14:28
мало того, их нужно будет немного ускорить

Quet
20.12.2016
17:14:54
бесплатный threadsafe? извините, но за все надо платить

Kirill
20.12.2016
17:15:13
платить будешь при многопоточном доступе к одному и тому же ключу

Subbotin
20.12.2016
17:15:38
А памятью платить не надо?

Quet
20.12.2016
17:15:51
ну вот значит как минимум тебе нужна проверка “к одному ключу или нет”, где-то хранить кто куда лезет и тд

Kirill
20.12.2016
17:16:08
А памятью платить не надо?
постараюсь оставить потребление тем же или его уменьшить

Quet
20.12.2016
17:17:37
чет с трудом верится что авторы го не додумались как такое сделать ) они конечно может и не на острие computer science, но и не полные дебилы

Kirill
20.12.2016
17:18:11
конечно. тут просто совсем неочевидное решение.

сделаю — зацените

и статейку захерачу на хабр

Quet
20.12.2016
17:18:37
ну ок) будь морально готов что не прокатит

Alexei
20.12.2016
17:18:47
тут и постановка задачи узкоспециализированная, писать одним тредом в один ключ

Kirill
20.12.2016
17:19:44
тут и постановка задачи узкоспециализированная, писать одним тредом в один ключ
эта штука решается обычным удалением проверок в нескольких местах

я хочу сделать так уже универсально

а для этого уже ряд сложностей нужно решить

Quet
20.12.2016
17:20:20
ну блин… эти проверки ведь там не зря

и их туда сунули не потому что авторам просто захотелось )

Kirill
20.12.2016
17:20:51
конечно. я даже понял зачем именно.

Quet
20.12.2016
17:21:14
то что в твоем примере у тебя получился ок результат — ну повезло сосед запустит и у него при перебалансировке мапа второй поток полезет куда-нибудь и все пиздой накроется

Google
Kirill
20.12.2016
17:22:00
конкретно этот код можно спокойно запустить на таких фиксах

а другой — да, улетит в пизду со скоростью света

Alexei
20.12.2016
17:22:34
я тут на работе тесты погонял, оно, конечно, дает небольшой выигрышь во времени, что-то около 400000-600000 наносекунд

на каждые 10 000 операций чтения/записи

Quet
20.12.2016
17:23:29
конкретно этот код можно спокойно запустить на таких фиксах
а ты знаешь как формализовать какой код можно запускать а какой нет? тут мне кажется есть только два варианта “можно любое многопоточное использование” и “нельзя никакого”

остальные промежуточные варианты это зло

Admin
ERROR: S client not available

Kirill
20.12.2016
17:25:26
но не буду же я релизить промежуточный вариант :)

Maxim
20.12.2016
19:25:07
С 500 мемберами вас

В честь этого - помогите глупому @toby3d решить проблему с подстановкой структур

Maxim
20.12.2016
19:47:10
И ещё вопросец, есть такая структура: type Response struct { Ok bool `json:"ok" Result ??? `json:"result" } Тип Result - динамический, на его месте подставляется одна из известных структур с данными. Мне юзать json.RawMessage для определения и подстановки?

corpix
20.12.2016
19:47:52
Да, json.RawMessage это наверное самое разумное решение такой задачи

Ещё можно написать Result interface{}. Всё зависит от того как ты хочешь работать с данными в случае Unmarshal в такую структуру

corpix
20.12.2016
19:50:57
Я не читал, аж 300 сообщений понафлудили

Maxim
20.12.2016
19:51:01
Kirill
20.12.2016
19:51:07
Google
Maxim
20.12.2016
19:51:49
Я не читал, аж 300 сообщений понафлудили
Ну Я на стриме уже час долблюсь над этим

Kirill
20.12.2016
19:52:35
corpix
20.12.2016
19:52:36
И стрим не смотрю сейчас. Я вообще за компьютером присутствую эпизодически %)

Maxim
20.12.2016
19:52:45
Kirill
20.12.2016
19:53:15
Нету ее
дык и у меня нет. но это же не значит, что это не лучше.

Maxim
20.12.2016
19:53:39
Короче, у меня есть 6 известных типов, которые подставляются под Result. Вот с этим я и застрял

corpix
20.12.2016
19:53:57
Лучше то что сам человек счёл для себя лучшим в конкретный момент времени, остальное - стереотипы ;)

Maxim
20.12.2016
19:58:45
Проблема получить конкретный, или какая-то другая?
Понять какая структура внутри и выплюнуть структуру уже с представленной структурой на выходе из функции.

Kirill
20.12.2016
19:59:05
или проще запихнуть все в одну структуру

#ачотакможнобыло

Maxim
20.12.2016
19:59:56
Понять какая структура внутри и выплюнуть структуру уже с представленной структурой на выходе из функции.
И если ошибка, то зрить в корень и выдрать оттуда объект ошибки. Если всё норм - отдать корен с подставленной структурой, мол, так оно и было.

Пока так получилось: fanc decodeResp(data []byte) (*Response, error) { var apiResp Response if err := json.Unmarshal(data, &apiResp); err != nil { return nil, err } if !apiResp.Ok { return nil, errors.New(apiResp.Error) } return &apiResp, nil

corpix
20.12.2016
20:03:52
Т.е. данные уже откуда-то получены и структура заполнена, например через Unmarshal, так? Если использовать тип interface{} для поля Result то такую структуру можно маршалить в ответ. Если требуется получить тип Foo из Result то надо использовать не interface{}(потому что при Unmarshal сопоставить полученные данные с типом Foo будет невозможно), а json.RawMessage, при этом потребуется описать некоторую логику по определению типа, в который должен быть заанмаршален этот кусок JSON. У тебя в данных есть какое-нибудь поле, которое позволяет это сделать?

Maxim
20.12.2016
20:04:26
Но тогда в тестах и вообще приходится писать что-то типа: resp.Result.(Account).AccessToken

corpix
20.12.2016
20:05:33
Да, это не очень хорошо. Возможно стоит сделать отдельную структуру под каждый вариант ответа(например ответ на действие с Account)

Страница 350 из 1674