首頁 >後端開發 >Golang >Go 中的比特幣匯率腳本

Go 中的比特幣匯率腳本

Barbara Streisand
Barbara Streisand原創
2025-01-18 14:03:09671瀏覽

在 Conky 面板上顯示 Python 腳本輸出中,我建議在 Conky 面板上執行 Python 腳本以顯示美元和巴西雷亞爾的比特幣匯率。然而,由於這樣一個基本任務的記憶體消耗高於預期,我用 Go 重寫了腳本。現在,已編譯的二進位檔案可以處理該任務。這種方法非常適合 Go 初學者,提供了學習 API 處理和貨幣值文字格式設定的機會。詳細介紹如下:

完整程式碼在本文最後。


1 - 打包和導入

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "strconv"
    "github.com/dustin/go-humanize"
)
  • package main:將其標記為程式的入口點。
  • 導入庫
    • coding/json:用於解析來自 API 的 JSON 回應。
    • fmt:用於文字格式化和列印。
    • io:用於讀取響應主體。
    • net/http:用於發出 HTTP 請求。
    • strconv:用於將字串轉換為數字。
    • humanize:用於為數字添加千位分隔符號。透過 go get github.com/dustin/go- humanize 安裝。

2 - 全域常數

const (
    apiURL = "https://economia.awesomeapi.com.br/json/last/BTC-USD,BTC-BRL"
)
  • apiURL:取得比特幣匯率的 API 端點。

3 - JSON 解析的結構

type CurrencyData struct {
    High string `json:"high"`
    Low  string `json:"low"`
}

type APIResponse struct {
    BTCUSD CurrencyData `json:"BTCUSD"`
    BTCBRL CurrencyData `json:"BTCBRL"`
}
  • 貨幣資料:保存貨幣的高值和低值。
  • APIResponse:表示具有 BTCUSD 和 BTCBRL 金鑰的完整 API 回應。

JSON 標籤 (json:"high") 將結構欄位對應到 JSON 鍵。


4 - 格式化貨幣值的函數

func formatCurrency(value string, prefix string) string {
    floatValue, err := strconv.ParseFloat(value, 64)
    if err != nil {
        return "N/A"
    }
    formattedValue := fmt.Sprintf("%s%s", prefix, humanize.FormatFloat("#,###.##", floatValue))
    return formattedValue
}
  • 使用 strconv.ParseFloat 將值(字串)轉換為浮點數。
  • 使用千位分隔符號和兩位小數格式化數字,並加上前綴(例如 $ 或 R$)。

5 - 主要功能

5.1 API請求

resp, err := http.Get(apiURL)
if err != nil {
    writeError(err)
    return
}
defer resp.Body.Close()

body, err := io.ReadAll(resp.Body)
if err != nil {
    writeError(err)
    return
}
  • http.Get(apiURL):向 API 發送 GET 請求。
  • defer resp.Body.Close():確保回應正文在處理後關閉。
  • io.ReadAll:讀取回應正文。

5.2 JSON解析

var data APIResponse
if err := json.Unmarshal(body, &data); err != nil {
    writeError(err)
    return
}
  • json.Unmarshal:將 JSON 回應解析為 APIResponse 結構。

5.3 數據格式化

usdAlta := formatCurrency(data.BTCUSD.High, "$$")
usdBaixa := formatCurrency(data.BTCUSD.Low, "$$")

brlAlta := formatCurrency(data.BTCBRL.High, "R$$")
brlBaixa := formatCurrency(data.BTCBRL.Low, "R$$")

格式化 API 提供的值以供顯示。

5.4 結果構建

formattedData := fmt.Sprintf(
    "\n\n${color white}BTC - USD\n${color}${color green} High: ${color}${color white}%s\n${color red} Low: ${color}${color white}%s\n\n"+
        "${color white}BTC - BRL\n${color}${color green} High: ${color}${color white}%s\n${color red} Low: ${color}${color white}%s\n",
    usdAlta, usdBaixa, brlAlta, brlBaixa,
)
fmt.Println(formattedData)

使用格式化值建立最終輸出字串。


6 - 錯誤記錄功能

func writeError(err error) {
    errMsg := fmt.Sprintf("Error: %v", err)
    fmt.Println(errMsg)
}

將錯誤記錄到終端。


? btc_data.go

運行: go build btc_data.go && ./btc_data.go

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "strconv"
    "github.com/dustin/go-humanize"
)

如果這篇文章對您有幫助或您喜歡它,請考慮貢獻:Go 中的比特幣匯率腳本

以上是Go 中的比特幣匯率腳本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn