安裝
go get github.com/chainstream-io/chainstream-go-sdk
快速開始
import chainstream "github.com/chainstream-io/chainstream-go-sdk"
client, err := chainstream.NewChainStreamClient(accessToken, &chainstream.ChainStreamClientOptions{})
if err != nil {
log.Fatal(err)
}
defer client.Close()
REST API 範例
查詢代幣資訊:package main
import (
"context"
"encoding/json"
"fmt"
"io"
"log"
chainstream "github.com/chainstream-io/chainstream-go-sdk"
"github.com/chainstream-io/chainstream-go-sdk/openapi/token"
)
const ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"
func main() {
fmt.Println("透過 API 查詢代幣...")
// 初始化 SDK 用戶端
client, err := chainstream.NewChainStreamClient(ACCESS_TOKEN, &chainstream.ChainStreamClientOptions{})
if err != nil {
log.Fatalf("建立用戶端失敗: %v", err)
}
defer client.Close()
chain := token.Sol
tokenAddress := "So11111111111111111111111111111111111111112" // SOL
fmt.Printf("查詢: %s/%s\n", chain, tokenAddress)
// 透過 SDK 呼叫 API
resp, err := client.Token.GetToken(context.Background(), chain, tokenAddress)
if err != nil {
log.Fatalf("API 呼叫失敗: %v", err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatalf("讀取回應失敗: %v", err)
}
var result interface{}
if err := json.Unmarshal(body, &result); err != nil {
log.Fatalf("解析 JSON 失敗: %v", err)
}
fmt.Println("\n結果:")
prettyJSON, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(prettyJSON))
}
WebSocket 範例
訂閱即時代幣 K 線資料:package main
import (
"fmt"
"os"
"os/signal"
"syscall"
chainstream "github.com/chainstream-io/chainstream-go-sdk"
"github.com/chainstream-io/chainstream-go-sdk/openapi/token"
"github.com/chainstream-io/chainstream-go-sdk/stream"
)
const ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"
func main() {
fmt.Println("啟動 WebSocket 訂閱...")
// 建立 ChainStreamClient(訂閱時會自動連線 WebSocket)
client, err := chainstream.NewChainStreamClient(ACCESS_TOKEN, &chainstream.ChainStreamClientOptions{
StreamURL: "wss://realtime-dex.chainstream.io/connection/websocket",
})
if err != nil {
fmt.Printf("建立用戶端失敗: %v\n", err)
os.Exit(1)
}
defer client.Close()
chain := "sol"
tokenAddress := "So11111111111111111111111111111111111111112" // SOL
fmt.Printf("訂閱代幣 K 線: %s/%s\n", chain, tokenAddress)
fmt.Println("監聽中... (按 Ctrl+C 停止)")
// 訂閱代幣 K 線(WebSocket 自動連線)
messageCount := 0
unsubscribe := client.Stream.SubscribeTokenCandles(chain, tokenAddress, token.N1s, func(data stream.TokenCandle) {
messageCount++
fmt.Printf("[%d] open=%s, close=%s, high=%s, low=%s, volume=%s\n",
messageCount,
data.Open,
data.Close,
data.High,
data.Low,
data.Volume,
)
}, "")
defer unsubscribe()
// 處理中斷信號
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM)
// 等待中斷信號
<-interrupt
fmt.Println("\n收到中斷信號,關閉連線...")
fmt.Printf("共收到訊息: %d\n", messageCount)
}
並行請求
var wg sync.WaitGroup
tokens := []string{"ADDR1", "ADDR2", "ADDR3"}
results := make([]*token.Token, len(tokens))
for i, addr := range tokens {
wg.Add(1)
go func(i int, addr string) {
defer wg.Done()
resp, _ := client.Token.GetToken(ctx, token.Sol, addr)
results[i] = resp
}(i, addr)
}
wg.Wait()
相關資源
GitHub
檢視原始碼
pkg.go.dev
套件文件

