70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
![]() |
package okx
|
||
|
|
||
|
import (
|
||
|
"encoding/csv"
|
||
|
"encoding/json"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// TickerList 封装Ticker数组并提供序列化方法
|
||
|
type TickerList struct {
|
||
|
Tickers []*Ticker
|
||
|
}
|
||
|
|
||
|
// ToJson 将Ticker数组序列化为JSON字符串
|
||
|
func (tl *TickerList) ToJson() (string, error) {
|
||
|
jsonData, err := json.Marshal(tl.Tickers)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
return string(jsonData), nil
|
||
|
}
|
||
|
|
||
|
// ToCsv 将Ticker数组序列化为CSV字符串
|
||
|
func (tl *TickerList) ToCsv() (string, error) {
|
||
|
var sb strings.Builder
|
||
|
writer := csv.NewWriter(&sb)
|
||
|
|
||
|
// 写入CSV头
|
||
|
header := []string{
|
||
|
"InstType", "InstID", "Last", "LastSz", "AskPx", "AskSz",
|
||
|
"BidPx", "BidSz", "Open24h", "High24h", "Low24h",
|
||
|
"VolCcy24h", "Vol24h", "Ts", "SodUtc0", "SodUtc8",
|
||
|
}
|
||
|
if err := writer.Write(header); err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
// 写入数据
|
||
|
for _, ticker := range tl.Tickers {
|
||
|
record := []string{
|
||
|
ticker.InstType,
|
||
|
ticker.InstID,
|
||
|
ticker.Last,
|
||
|
ticker.LastSz,
|
||
|
ticker.AskPx,
|
||
|
ticker.AskSz,
|
||
|
ticker.BidPx,
|
||
|
ticker.BidSz,
|
||
|
ticker.Open24h,
|
||
|
ticker.High24h,
|
||
|
ticker.Low24h,
|
||
|
ticker.VolCcy24h,
|
||
|
ticker.Vol24h,
|
||
|
ticker.Ts,
|
||
|
ticker.SodUtc0,
|
||
|
ticker.SodUtc8,
|
||
|
}
|
||
|
if err := writer.Write(record); err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
writer.Flush()
|
||
|
if err := writer.Error(); err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
return sb.String(), nil
|
||
|
}
|