首页 > 后端开发 > Golang > Go 中的货币转换器

Go 中的货币转换器

Barbara Streisand
发布: 2024-12-06 05:33:10
原创
620 人浏览过

Currency Converter In Go

嘿伙计们!

又一个用 Go 制作货币转换器的小型迷你项目!

这是一个简单但有趣的项目,根据个人经验,应该需要大约一两个小时。它从一端获取一种货币类型、我们打算转换成的货币以及要转换的金额。

我正在使用第三方服务 (https://openexchangerates.org) 来检索最新的货币数据。

我的主要基础货币是:

1) USD
2) EUR
3) GBP
4) JPY
登录后复制
登录后复制

而且我还可以通过 TUI 中的输入支持“其他”货币。既适用于基础货币,也适用于要转换的货币。

~ 源代码:在这里找到


让我们开始吧

What is your base currency?

                              List             

$ USD               
United States Dollar

£ GBP               
British Pound

€ EUR       
Euro        

¥ JPY       
Japanese Yen       


  •••          
登录后复制
登录后复制

应用程序的主要功能有:

  1. 获取用户输入的转换详细信息
  2. 使用这些详细信息并向 Openxchangerates(提供最新货币兑换率的第三方服务)发送 API 请求
  3. 转换货币和金额
  4. 向用户输出货币和金额数据

使用的软件包:

  1. net/http - 用于对货币兑换 api
  2. 进行 http 请求
  3. github.com/charmbracelet/huh - 用于 TUI 界面表单
  4. github.com/charmbracelet/bubbles/list - 功能丰富,用于浏览通用项目列表
  5. coding/json - 为了编组 API 的数据
  6. github.com/charmbracelet/lipgloss - 终端布局的样式定义

它是如何运作的?

所以让我们讨论第一个功能,即从用户那里获取转换详细信息。

必须创建一个用于获取用户提供的数据的视图方法,它会询问用户要转换的货币、要转换为哪种货币等问题。

func (m model) View() string {
    if m.err != nil {
        return fmt.Sprintf("Error: %v\n\nPress any key to continue.\n", m.err)
    }

    if m.finished {
        // Return an empty string when finished to avoid redundant output.
        return ""
    }

    switch m.stage {
    case 0:
        if m.isCustomInput {
            return questionStyle.Render("Enter your custom base currency code (e.g., USD):\n\n") + m.textInput.View()
        }
        return questionStyle.Render("What is your base currency?\n\n") + m.list.View()
    case 1:
        if m.isCustomInput {
            return questionStyle.Render("Enter your custom target currency code (e.g., EUR):\n\n") + m.textInput.View()
        }
        return questionStyle.Render("What do you want to convert to?\n\n") + m.list.View()
    case 2:
        return questionStyle.Render("How much to convert?\n\n") + m.textInput.View()
    default:
        return ""
    }
}
登录后复制
What do you want to convert to?

                                  List             

$ USD               
United States Dollar

£ GBP               
British Pound       


  •••        
登录后复制
How much to convert?

                    > 200 
登录后复制

现在让我们讨论第二点,使用货币换算详细信息并向 Openxchangerates 发送 API 请求。

在这里,我通过第三方货币兑换平台提供的 API 密钥从 Openxchangerates.org 获取/获取最新的货币汇率。就我而言,我使用 .env 进行秘密管理,但还有许多其他方法可以更好地处理此问题,特别是如果它是生产应用程序。

~ 用于此目的的 Openxchangerates.org 文档:位于此处

//api.go

package api

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type CurrencyData struct {
    Base  string             `json:"base"`
    Rates map[string]float64 `json:"rates"`
}

func FetchRates(apiKey string) (CurrencyData, error) {
    url := fmt.Sprintf("https://openexchangerates.org/api/latest.json?app_id=%s&prettyprint=false", apiKey)
    resp, err := http.Get(url)
    if err != nil {
        return CurrencyData{}, err
    }
    defer resp.Body.Close()

    if resp.StatusCode != 200 {
        return CurrencyData{}, fmt.Errorf("API request failed with status: %s", resp.Status)
    }

    var data CurrencyData
    err = json.NewDecoder(resp.Body).Decode(&data)
    if err != nil {
        return CurrencyData{}, err
    }

    return data, nil
}
登录后复制

然后我们将继续转换货币和金额:

//conversion.go

package conversion

func Convert(amount float64, rateFrom, rateTo float64) float64 {
    return amount * (rateTo / rateFrom)
}
登录后复制

它只是获取基础金额(金额)、基础货币的汇率以及要转换的汇率并返回最终转换的金额。


最后,将转换后的货币和金额相关数据提供给用户。

控制这些选择背后的逻辑的是一个更新函数,它充当应用程序模型的主要状态转换处理程序。

1) USD
2) EUR
3) GBP
4) JPY
登录后复制
登录后复制
What is your base currency?

                              List             

$ USD               
United States Dollar

£ GBP               
British Pound

€ EUR       
Euro        

¥ JPY       
Japanese Yen       


  •••          
登录后复制
登录后复制

结论

这几乎概括了这个相对快速的货币转换器。我希望您喜欢快速阅读,并且也可以随意尝试一下,这还不错! ?.

请随意尝试其他第三方货币兑换提供商,有很多。希望他们也有一个像样的 API!

大家下期再见! ??

以上是Go 中的货币转换器的详细内容。更多信息请关注PHP中文网其他相关文章!

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