Files
exchange_go/services/bitgetservice/bitget_example.go
2025-10-14 19:58:59 +08:00

230 lines
6.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package bitgetservice
import (
log "github.com/go-admin-team/go-admin-core/logger"
)
// ExampleBitgetMarketClient 展示如何使用Bitget公开行情客户端
func ExampleBitgetMarketClient() {
// 1. 创建Bitget客户端不需要API密钥用于公开数据
client := &BitgetClient{}
// 初始化公开行情客户端
marketConfig := DefaultMarketConfig()
client.marketClient = NewBitgetMarketClient(marketConfig)
// 2. 设置代理(可选)
// client.SetMarketProxy("socks5", "127.0.0.1:1080")
// 3. 设置消息监听器
msgListener := func(message string) {
log.Info("收到市场数据: %s", message)
// 在这里处理市场数据
}
errorListener := func(message string) {
log.Error("收到错误消息: %s", message)
}
client.SetMarketListeners(msgListener, errorListener)
// 4. 连接WebSocket
if err := client.ConnectMarketData(); err != nil {
log.Error("连接市场数据失败: %v", err)
return
}
// 5. 订阅现货行情
tickerListener := func(message string) {
log.Info("收到BTC-USDT行情: %s", message)
}
if err := client.SubscribeSpotTicker("BTCUSDT", tickerListener); err != nil {
log.Error("订阅现货行情失败: %v", err)
return
}
// 6. 订阅深度数据
depthListener := func(message string) {
log.Info("收到BTC-USDT深度: %s", message)
}
if err := client.SubscribeSpotDepth("BTCUSDT", depthListener); err != nil {
log.Error("订阅深度数据失败: %v", err)
return
}
// 7. 订阅成交数据
tradeListener := func(message string) {
log.Info("收到BTC-USDT成交: %s", message)
}
if err := client.SubscribeSpotTrades("BTCUSDT", tradeListener); err != nil {
log.Error("订阅成交数据失败: %v", err)
return
}
// 8. 订阅K线数据
klineListener := func(message string) {
log.Info("收到BTC-USDT K线: %s", message)
}
if err := client.SubscribeKline("BTCUSDT", "1m", klineListener); err != nil {
log.Error("订阅K线数据失败: %v", err)
return
}
log.Info("所有订阅完成,开始接收数据...")
// 保持连接(在实际应用中,你可能需要其他方式来保持程序运行)
// select {}
}
// ExampleBitgetPrivateWebSocket 展示如何使用私有WebSocket订单、持仓等
func ExampleBitgetPrivateWebSocket() {
// 私有数据订阅仍然使用 BitgetWebSocketManager
// apiKey := "your_api_key"
// secretKey := "your_secret_key"
// passphrase := "your_passphrase"
// // 创建私有WebSocket管理器
// manager := GetOrCreateBitgetWebSocketManager(apiKey, secretKey, passphrase, "spot")
// // 启动连接
// if err := manager.Start(); err != nil {
// log.Error("启动私有WebSocket连接失败: %v", err)
// return
// }
// log.Info("私有WebSocket连接成功可以接收订单、持仓等私有数据")
}
// ExampleMixedUsage 展示混合使用公开和私有订阅
func ExampleMixedUsage() {
// apiKey := "your_api_key"
// secretKey := "your_secret_key"
// passphrase := "your_passphrase"
// // 1. 创建完整的Bitget客户端
// client, err := NewBitgetClient(apiKey, secretKey, passphrase)
// if err != nil {
// log.Error("创建Bitget客户端失败: %v", err)
// return
// }
// // 2. 设置公开行情监听器
// client.SetMarketListeners(
// func(message string) {
// log.Info("公开行情数据: %s", message)
// },
// func(message string) {
// log.Error("公开行情错误: %s", message)
// },
// )
// // 3. 连接公开行情
// if err := client.ConnectMarketData(); err != nil {
// log.Error("连接公开行情失败: %v", err)
// return
// }
// // 4. 订阅公开行情
// if err := client.SubscribeSpotTicker("BTCUSDT", func(message string) {
// log.Info("BTC行情: %s", message)
// }); err != nil {
// log.Error("订阅行情失败: %v", err)
// return
// }
// // 5. 同时使用私有WebSocket如果需要
// privateManager, err := GetOrCreateBitgetWebSocketManager(apiKey, secretKey, passphrase, "spot")
// if err != nil {
// log.Error("创建私有WebSocket失败: %v", err)
// return
// }
// if err := privateManager.Start(); err != nil {
// log.Error("启动私有WebSocket失败: %v", err)
// return
// }
// log.Info("混合使用设置完成:公开行情 + 私有数据")
}
// ExampleSubscribeMultipleSymbols 展示如何订阅多个交易对
func ExampleSubscribeMultipleSymbols() {
client := &BitgetClient{}
marketConfig := DefaultMarketConfig()
client.marketClient = NewBitgetMarketClient(marketConfig)
// 连接
if err := client.ConnectMarketData(); err != nil {
log.Error("连接失败: %v", err)
return
}
// 批量订阅多个交易对的行情
symbols := []string{"BTCUSDT", "ETHUSDT", "ADAUSDT", "DOTUSDT"}
for _, symbol := range symbols {
listener := func(sym string) OnReceive {
return func(message string) {
log.Info("%s 行情更新: %s", sym, message)
}
}(symbol)
if err := client.SubscribeSpotTicker(symbol, listener); err != nil {
log.Error("订阅 %s 行情失败: %v", symbol, err)
} else {
log.Info("成功订阅 %s 行情", symbol)
}
}
log.Info("批量订阅完成")
}
// ExampleCustomSubscription 展示如何使用自定义订阅
func ExampleCustomSubscription() {
client := &BitgetClient{}
marketConfig := DefaultMarketConfig()
client.marketClient = NewBitgetMarketClient(marketConfig)
if err := client.ConnectMarketData(); err != nil {
log.Error("连接失败: %v", err)
return
}
// 自定义订阅请求
customSubscriptions := []SubscribeReq{
{
InstType: "SPOT",
Channel: "ticker",
InstId: "BTCUSDT",
},
{
InstType: "SPOT",
Channel: "books",
InstId: "ETHUSDT",
},
{
InstType: "UMCBL", // 合约
Channel: "ticker",
InstId: "BTCUSDT",
},
}
// 统一的消息处理器
messageHandler := func(message string) {
log.Info("自定义订阅数据: %s", message)
// 在这里根据消息内容进行不同的处理
}
// 批量订阅
if err := client.SubscribeMarketData(customSubscriptions, messageHandler); err != nil {
log.Error("自定义订阅失败: %v", err)
return
}
log.Info("自定义订阅完成")
}