саша
Roman
aadz
да любая тема отдельная
aadz
особенно хорошо, если она в теме и в правильном месте
Roman
вот например можно ли рассматривать Go как systems programming language? можно ли написать библиотеку на Go, которую можно вызвать из другого языка (не посредством сети)?
Roman
C/C++/Rust этим могут похвастаться, Go не особо
aadz
ты решил поменять определение понятия языка для системного программирования? Ну, OK!
aadz
Просто иногда даже и задумаешься - сколько можно толочь воду в ступе?
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
Я правда на всякий случай попытался))
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
Daniel
string и float64
Alexey
это прямо праздник!
Да) В этом то всё веселье, не будь в массиве смешанных типов данных, всё было бы проще)
Daniel
про цикл я не понял - вы в цикле поля структуры перебираете? рефлексией?
Daniel
это я бы делать не советовал
Daniel
я бы советовал руками прописать все 11 присваиваний
Daniel
типа
Symbol : res[0].(string)
Bid: res[1].(float64)
Alexey
Увидел ответ
Daniel
ага
Alexey
Сейчас попробую, большое спасибо за помощь
Alexey
И ещё, если не сложно, могли бы вы проконсультировать меня по такому вопорсу:
В корне моего проекта лежит файл server.go который отвечает за обработку HTTP запосов, но мне так же нужны различные мелкие утилитки для операций над БД, сбора аналитики по крону, они лежат в папке cmd в корне поекта.
В связи с этим у меня возникает порблема с пописыванием путей к файлам конфигов, к файлам логов так как точкой отсчёта является папка в которой лежит бинарник.
Бодскажите как правильно организовывать доступ к файлам?
Alexey
Я скорее всего объяснил не очень понятно, поэтому если нужны уточнения, я их предоставлю
Мерль
Eugenii
конфиг через флаг, лог пути в конфиге
ну или кординально ваулт
Aleksandr
Eugenii
а еще можно, что бы все было одним бинарем, режим выбирался флагом и соответсвенно, небольшая обертка на баше в нужном месте
Daniel
мне вот непонятен вопрос
Daniel
1. конечно, отсчет идет не от того места, где лежит исходник, а от того, где лежит скомпилированный бинарник
Daniel
2. путь к конфигу придется передавать так или иначе. или захардкодив путь в утилитку, или сделав в ней флаг, или еще как
Daniel
3. мелкая утилитка и остовной бинарник с точки зрения конфига ничем не отличаются
Roman
Aleksandr
Eugenii
где бы не лежали конфиги, три варианта к ним достучаться
1. конвенция
2. относительно точки запуска
3. флаг
а флаг всегда можно завернуть в баш/перл/повершел обертку и все будет мирно и красиво
Alexey
Eugenii
договориться, что конфиг всегда лежит где нибудь типа
/etc/myprogram/prod.(conf|json|yaml)
Alexey
Eugenii
опять же, никто не запрещает комбинировать
если пришел флаг, то конфиг из флага
если нет, но есть в той же папочке, то берем его
если и его нет, то идем в заранее договоренное место
YᑌᖇIY
Roman
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
)
Alexey
Roman
Alexey
Alexey
https://play.golang.org/p/dPSCQo9OAW8
Alexey
Но чет 🤢
Roman
https://goplay.space/#e2_V3xpkmb5
собственно это нужный результат, но поскольку enum типов в моём случае относительно много я хотел сделать универсальную функцию которая бы любой подобный тип брата и возвращала рандомное его значение
Alexey
Roman
Alexey
тут как бы трэйд офф)
Roman
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 .
Anonymous
Roman
Anonymous
Anonymous
thanks
Александр
Доброе утро! Для саморазвития решил написать громоздкий проект. Постепенно появляются проблемы с рефакторингом. Подскажите крупные эталонные проекты в которых все хорошо с кодом, хочу подсмотреть.