嘿伙计们!
又一个用 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 •••
应用程序的主要功能有:
- 获取用户输入的转换详细信息
- 使用这些详细信息并向 Openxchangerates(提供最新货币兑换率的第三方服务)发送 API 请求
- 转换货币和金额
- 向用户输出货币和金额数据
使用的软件包:
- net/http - 用于对货币兑换 api 进行 http 请求
- github.com/charmbracelet/huh - 用于 TUI 界面表单
- github.com/charmbracelet/bubbles/list - 功能丰富,用于浏览通用项目列表
- coding/json - 为了编组 API 的数据
- 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中文网其他相关文章!

OpenSSL,作为广泛应用于安全通信的开源库,提供了加密算法、密钥和证书管理等功能。然而,其历史版本中存在一些已知安全漏洞,其中一些危害极大。本文将重点介绍Debian系统中OpenSSL的常见漏洞及应对措施。DebianOpenSSL已知漏洞:OpenSSL曾出现过多个严重漏洞,例如:心脏出血漏洞(CVE-2014-0160):该漏洞影响OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻击者可利用此漏洞未经授权读取服务器上的敏感信息,包括加密密钥等。

本文演示了创建模拟和存根进行单元测试。 它强调使用接口,提供模拟实现的示例,并讨论最佳实践,例如保持模拟集中并使用断言库。 文章

本文探讨了GO的仿制药自定义类型约束。 它详细介绍了界面如何定义通用功能的最低类型要求,从而改善了类型的安全性和代码可重复使用性。 本文还讨论了局限性和最佳实践

本文讨论了GO的反思软件包,用于运行时操作代码,对序列化,通用编程等有益。它警告性能成本,例如较慢的执行和更高的内存使用,建议明智的使用和最佳

本文使用跟踪工具探讨了GO应用程序执行流。 它讨论了手册和自动仪器技术,比较诸如Jaeger,Zipkin和Opentelemetry之类的工具,并突出显示有效的数据可视化

本文讨论了GO中使用表驱动的测试,该方法使用测试用例表来测试具有多个输入和结果的功能。它突出了诸如提高的可读性,降低重复,可伸缩性,一致性和A


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具