aadz
да любая тема отдельная
aadz
особенно хорошо, если она в теме и в правильном месте
Roman
вот например можно ли рассматривать Go как systems programming language? можно ли написать библиотеку на Go, которую можно вызвать из другого языка (не посредством сети)?
Roman
C/C++/Rust этим могут похвастаться, Go не особо
aadz
ты решил поменять определение понятия языка для системного программирования? Ну, OK!
aadz
Просто иногда даже и задумаешься - сколько можно толочь воду в ступе?
Roman
ты решил поменять определение понятия языка для системного программирования? Ну, OK!
это понятие размытое, нет конкретного определения, с этим согласны и Stroustrup, и Пайк и… кто там D проектировал?
Alexey
Привет всем! Я пишу клиентский метод для вот этого метода 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
а почему нельзя сразу в структуру распарсить?
Daniel
зачем этот []interface{}
Alexey
а почему нельзя сразу в структуру распарсить?
Сразу в структуры не получается, API возвращет ответ посто в виде массива
Alexey
Я правда на всякий случай попытался))
Daniel
плохо попытались
Daniel
в массив структур почему нельзя распарсить?
Alexey
плохо попытались
Я сделал вот так 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
так там массив массивов
Daniel
к вашей структуре надо приписать кастомный анмаршалер
Daniel
который будет сначала массив парсить, а потом структуры заполнять
Daniel
о, да там в одном массиве строки и числа
Daniel
это прямо праздник!
Alexey
к вашей структуре надо приписать кастомный анмаршалер
Ну то есть получается что по итогу будет нужно присваивать эллементы массива к полям структуры? Я попробовал сделать это посто в цикле, но у меня возникла сложность с типами. В массиве у меня тип данных интерфейс, а нужно присвоить к полю с типом стринг или float64, я так и не нагуглил как это сделать лучше всего
Daniel
пожалуй, действительно, с interface{} это разобрать будет проще всего
Daniel
я прошу прощения
Daniel
string и float64
Alexey
это прямо праздник!
Да) В этом то всё веселье, не будь в массиве смешанных типов данных, всё было бы проще)
Daniel
про цикл я не понял - вы в цикле поля структуры перебираете? рефлексией?
Daniel
это я бы делать не советовал
Daniel
я бы советовал руками прописать все 11 присваиваний
Daniel
типа Symbol : res[0].(string) Bid: res[1].(float64)
Alexey
про цикл я не понял - вы в цикле поля структуры перебираете? рефлексией?
Не совсем, я перебираю response типа []interface{} и хочу присваивать руками все поля структуры, но не знаю как преобразовать тип, так как не могу присваить к строковому полю тип interface{}
Alexey
Увидел ответ
Daniel
ага
Alexey
Сейчас попробую, большое спасибо за помощь
Alexey
И ещё, если не сложно, могли бы вы проконсультировать меня по такому вопорсу: В корне моего проекта лежит файл server.go который отвечает за обработку HTTP запосов, но мне так же нужны различные мелкие утилитки для операций над БД, сбора аналитики по крону, они лежат в папке cmd в корне поекта. В связи с этим у меня возникает порблема с пописыванием путей к файлам конфигов, к файлам логов так как точкой отсчёта является папка в которой лежит бинарник. Бодскажите как правильно организовывать доступ к файлам?
Alexey
Я скорее всего объяснил не очень понятно, поэтому если нужны уточнения, я их предоставлю
Eugenii
конфиг через флаг, лог пути в конфиге ну или кординально ваулт
Eugenii
а еще можно, что бы все было одним бинарем, режим выбирался флагом и соответсвенно, небольшая обертка на баше в нужном месте
Alexey
передавайте все пути через флаги при запуске сервера
Мне пути к конфигам нужны и в небольших утилитках, будет не очень удобно для каждой передавать пути. Или я не правльно понял что нужно сделать?
Daniel
мне вот непонятен вопрос
Daniel
1. конечно, отсчет идет не от того места, где лежит исходник, а от того, где лежит скомпилированный бинарник
Daniel
2. путь к конфигу придется передавать так или иначе. или захардкодив путь в утилитку, или сделав в ней флаг, или еще как
Daniel
3. мелкая утилитка и остовной бинарник с точки зрения конфига ничем не отличаются
Yaroslav
unique_ptr же вроде deprecated?
Нет конечно. auto_ptr deprecated и в 17 плюсах уже удален из стандарта
Aleksandr
1. конечно, отсчет идет не от того места, где лежит исходник, а от того, где лежит скомпилированный бинарник
точнее от текущей директории, которая может не равняться директории, в которой лежит бинарник
Eugenii
где бы не лежали конфиги, три варианта к ним достучаться 1. конвенция 2. относительно точки запуска 3. флаг а флаг всегда можно завернуть в баш/перл/повершел обертку и все будет мирно и красиво
Alexey
где бы не лежали конфиги, три варианта к ним достучаться 1. конвенция 2. относительно точки запуска 3. флаг а флаг всегда можно завернуть в баш/перл/повершел обертку и все будет мирно и красиво
Обернуть в bash наверное будет не плохим выходом. А при помощи "конвенции" это как? В том смысле что я не понимаю как это работает
Eugenii
договориться, что конфиг всегда лежит где нибудь типа /etc/myprogram/prod.(conf|json|yaml)
Eugenii
опять же, никто не запрещает комбинировать если пришел флаг, то конфиг из флага если нет, но есть в той же папочке, то берем его если и его нет, то идем в заранее договоренное место
Roman
в телеге жутко нехватает реакций на сообщения
Roman
не в курсе случайно можно ли с помощью рефлексии получить все константы определённого типа? // Gender represents the gender type of a person type Gender int const ( _ Gender = iota // Male represents a male person GnMale // Female represents a female person GnFemale )
Roman
А что значит получить все константы? Всмысле значения? или названия констант?
проще говоря для того чтоб получить рандомное значение из "enum"а
Alexey
https://play.golang.org/p/dPSCQo9OAW8
Alexey
Но чет 🤢
Roman
https://goplay.space/#e2_V3xpkmb5 собственно это нужный результат, но поскольку enum типов в моём случае относительно много я хотел сделать универсальную функцию которая бы любой подобный тип брата и возвращала рандомное его значение
Roman
https://play.golang.org/p/dPSCQo9OAW8
ну это практически то-же самое, не generic
Alexey
code generation.. бее 🤢
ну тогда придется писать тонну boilerplate кода)
Alexey
тут как бы трэйд офф)
Anonymous
which is the best and free ide for go
Roman
which is the best and free ide for go
Visual Studio Code with the Go plugin, it'll be more than enough for most things except refactoring this group is russian-speaking by the way
Anonymous
can i use go language for application and gui(frond end) developing like in java using swing .
Roman
can i use go language for application and gui(frond end) developing like in java using swing .
there aren't many GUI frameworks for Go unfortunately, the best I personally know is https://github.com/therecipe/qt, it's essentially Qt bindings for Go I'd recommend continuing in an english-speaking group btw
Anonymous
thanks
Александр
Доброе утро! Для саморазвития решил написать громоздкий проект. Постепенно появляются проблемы с рефакторингом. Подскажите крупные эталонные проекты в которых все хорошо с кодом, хочу подсмотреть.