
Roman
22.09.2018
15:05:43
Внезапно большинство десктопных приложений пишутся именно на языках "системного программирования", ибо микролаги из-за GC
GUI renderer = systems programming
GUI application = application programming
я не говорю что на Go нужно рендерить, нет, ни в коем случае! (мы об этом уже здесь говорили почему писать рендер на Go это очень плохая идея)
а вот для самой логики приложения, для работы с сетью, для работы с файловой системой, с базами данных, с поверхностным number crunchung'ом и т.д. Go довольно хорош
в идеале у нас рендер на Rust вызывающий Go код. Никаких микролагов, стабильные 60 фпс, но и относительно простое написание логики приложения.
https://github.com/therecipe/qt это как-раз про C++/Qt рендер с Go логикой

Alexander
22.09.2018
15:07:07

Никита
22.09.2018
15:07:26
А что думаете на счёт Elixir? Discord его активно использует

Alexander
22.09.2018
15:07:50
эликсир хорош

Google

Alexander
22.09.2018
15:08:00
В том же VS Code если быстро печатать, то можно заметить инпут лаг.

Alexander
22.09.2018
15:08:01
внешне по крайне мере

Alexander
22.09.2018
15:08:23
Хотя рендер у него на цпп.

Alexander
22.09.2018
15:08:28
хотя я у нашего эрлангиста спросил, он сказал, что нах*й не нужОн

Roman
22.09.2018
15:08:53

Alexander
22.09.2018
15:09:27

Roman
22.09.2018
15:10:35

eugene
22.09.2018
15:11:24
а как думаете, чем плох swift по сравнению с go для бэкэнда?

Roman
22.09.2018
15:12:01

Alexander
22.09.2018
15:13:45
Скорее десктопные приложения нужно писать с архитектурой frontend-backend, где на бэкенде вся медленная бизнес логика, а на фронте быстрые обработчики событий.

Alexander
22.09.2018
15:16:37

Google

Alexander
22.09.2018
15:17:23

Roman
22.09.2018
15:17:40

Alexander
22.09.2018
15:18:51

Никита
22.09.2018
15:19:15

Roman
22.09.2018
15:19:34

Alexander
22.09.2018
15:19:38

Roman
22.09.2018
15:20:38

Paul
22.09.2018
15:31:35

Alexander
22.09.2018
15:35:14

eugene
22.09.2018
15:35:44

Alexander
22.09.2018
15:37:20
Владение и заимствование же решают эти проблемы фундаментально.
И ещё кучу других.

eugene
22.09.2018
15:38:07

Alexander
22.09.2018
15:39:01

eugene
22.09.2018
15:39:34

Alexander
22.09.2018
15:39:47

eugene
22.09.2018
15:40:14
Не решают.
зачем тогда нужен shared_ptr и unique_ptr?

Alexander
22.09.2018
15:41:11
зачем тогда нужен shared_ptr и unique_ptr?
shared_ptr решает проблему своевременного очищения "общих" объектов, unique_ptr решает проблему своевременного очищения объектов, на которые есть одна уникальная ссылка. При этом unique_ptr никак не гарантирует, что на объект есть только одна ссылка.

eugene
22.09.2018
15:45:53

Google

Alexander
22.09.2018
15:47:19
тогда странно, что unique_ptr назван так
Ничего странного, он создан ДЛЯ объектов на которые должна быть только одна уникальная ссылка, при этом за исполнением контракта в C++ традиционно должен следить программист

Roman
22.09.2018
16:00:05

Alexander
22.09.2018
16:00:54
смотря что понимать под systems programming

Roman
22.09.2018
16:02:32
Владение и заимствование же решают эти проблемы фундаментально.
проблема в C++ в том, что можно этим good practice’ам следовать, а можно и нет…
в Rust такого выбора нет (однако он всё-же есть в виде unsafe для работы с C, но его в обычном коде не используют, только в связном)
Rust заставляет тебя думать правильно, C++’ам на тебя и твои баги н@срать))

Daniel
22.09.2018
16:03:49
Вот вам не лень...

Roman
22.09.2018
16:03:50

Alexander
22.09.2018
16:05:19

Roman
22.09.2018
16:05:20

Alexander
22.09.2018
16:06:16
@aadz69
Угу. Скрипты на Bash - это тоже приложения для приложений, я даже иногда такие системные скрипты пописываю

Alexander
22.09.2018
16:07:19

Roman
22.09.2018
16:07:26

Alexander
22.09.2018
16:07:44
да любая тема отдельная
особенно хорошо, если она в теме и в правильном месте

Roman
22.09.2018
16:09:16
вот например можно ли рассматривать Go как systems programming language? можно ли написать библиотеку на Go, которую можно вызвать из другого языка (не посредством сети)?
C/C++/Rust этим могут похвастаться, Go не особо

Alexander
22.09.2018
16:10:31
ты решил поменять определение понятия языка для системного программирования? Ну, OK!
Просто иногда даже и задумаешься - сколько можно толочь воду в ступе?

Google

Roman
22.09.2018
16:11:16


Alexey
22.09.2018
17:27:38
Привет всем! Я пишу клиентский метод для вот этого метода API:
https://api.bitfinex.com/v2/tickers?symbols=ALL
Подскажите как лучше всего распарсить ответ данного API в структуру
type TickerResponse struct {
Symbol string `json:"symbol"`
Bid float64 `json:"bid"`
BidSize float64 `json:"bid_size"`
Ask float64 `json:"ask"`
AskSize float64 `json:"ask_size"`
DailyChange float64 `json:"daily_change"`
DailyChangePerc float64 `json:"daily_change_perc"`
LastPrice float64 `json:"last_price"`
Volume float64 `json:"volume"`
High float64 `json:"high"`
Low float64 `json:"low"`
}
В данный момент я распарсил ответ вот таким образом
var response []interface{}
err = json.Unmarshal(body, &response)
if err != nil {
return response, err
}
Теперь мне нужно смапить response в структуру, но возникает сложность с преобразованием типов.

Daniel
22.09.2018
17:28:21
а почему нельзя сразу в структуру распарсить?
зачем этот []interface{}

Alexey
22.09.2018
17:29:48
Я правда на всякий случай попытался))

Daniel
22.09.2018
17:32:41
плохо попытались

Admin
ERROR: S client not available

Daniel
22.09.2018
17:33:03
в массив структур почему нельзя распарсить?

Alexey
22.09.2018
17:35:27
плохо попытались
Я сделал вот так
var tickersResponse []structures.TickerResponse
err = json.Unmarshal(body, &tickersResponse)
if err != nil {
return tickersResponse, err
}
но получил вот такую ошибку json: cannot unmarshal array into Go value of type structures.TickerResponse

Daniel
22.09.2018
17:37:43
так там массив массивов
к вашей структуре надо приписать кастомный анмаршалер
который будет сначала массив парсить, а потом структуры заполнять
о, да там в одном массиве строки и числа
это прямо праздник!

Alexey
22.09.2018
17:41:29
к вашей структуре надо приписать кастомный анмаршалер
Ну то есть получается что по итогу будет нужно присваивать эллементы массива к полям структуры? Я попробовал сделать это посто в цикле, но у меня возникла сложность с типами. В массиве у меня тип данных интерфейс, а нужно присвоить к полю с типом стринг или float64, я так и не нагуглил как это сделать лучше всего

Daniel
22.09.2018
17:41:31
пожалуй, действительно, с interface{} это разобрать будет проще всего
я прошу прощения
string и float64

Google

Alexey
22.09.2018
17:42:14
это прямо праздник!
Да) В этом то всё веселье, не будь в массиве смешанных типов данных, всё было бы проще)

Daniel
22.09.2018
17:43:06
про цикл я не понял - вы в цикле поля структуры перебираете? рефлексией?
это я бы делать не советовал
я бы советовал руками прописать все 11 присваиваний
типа
Symbol : res[0].(string)
Bid: res[1].(float64)

Alexey
22.09.2018
17:46:02
Увидел ответ

Daniel
22.09.2018
17:46:16
ага

Alexey
22.09.2018
17:46:34
Сейчас попробую, большое спасибо за помощь
И ещё, если не сложно, могли бы вы проконсультировать меня по такому вопорсу:
В корне моего проекта лежит файл server.go который отвечает за обработку HTTP запосов, но мне так же нужны различные мелкие утилитки для операций над БД, сбора аналитики по крону, они лежат в папке cmd в корне поекта.
В связи с этим у меня возникает порблема с пописыванием путей к файлам конфигов, к файлам логов так как точкой отсчёта является папка в которой лежит бинарник.
Бодскажите как правильно организовывать доступ к файлам?
Я скорее всего объяснил не очень понятно, поэтому если нужны уточнения, я их предоставлю

Мерлин
22.09.2018
17:56:10

Eugenii
22.09.2018
17:57:42
конфиг через флаг, лог пути в конфиге
ну или кординально ваулт

Aleksandr
22.09.2018
18:00:20


Eugenii
22.09.2018
18:01:16
а еще можно, что бы все было одним бинарем, режим выбирался флагом и соответсвенно, небольшая обертка на баше в нужном месте

Alexey
22.09.2018
18:01:49

Daniel
22.09.2018
18:07:10
мне вот непонятен вопрос
1. конечно, отсчет идет не от того места, где лежит исходник, а от того, где лежит скомпилированный бинарник
2. путь к конфигу придется передавать так или иначе. или захардкодив путь в утилитку, или сделав в ней флаг, или еще как