230 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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("自定义订阅完成")
 | ||
| }
 |