首页 > 后端开发 > Golang > 使用 Go 显示比特币汇率

使用 Go 显示比特币汇率

Mary-Kate Olsen
发布: 2025-01-18 12:04:09
原创
360 人浏览过

在 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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板