嘿伙计们!
又一个用 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 •••
应用程序的主要功能有:
使用的软件包:
所以让我们讨论第一个功能,即从用户那里获取转换详细信息。
必须创建一个用于获取用户提供的数据的视图方法,它会询问用户要转换的货币、要转换为哪种货币等问题。
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中文网其他相关文章!