嘿伙计们!
又一个用 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中文网其他相关文章!

在Go编程中,有效管理错误的方法包括:1)使用错误值而非异常,2)采用错误包装技术,3)定义自定义错误类型,4)复用错误值以提高性能,5)谨慎使用panic和recover,6)确保错误消息清晰且一致,7)记录错误处理策略,8)将错误视为一等公民,9)使用错误通道处理异步错误。这些做法和模式有助于编写更健壮、可维护和高效的代码。

在Go中实现并发可以通过使用goroutines和channels来实现。1)使用goroutines来并行执行任务,如示例中同时享受音乐和观察朋友。2)通过channels在goroutines之间安全传递数据,如生产者和消费者模式。3)避免过度使用goroutines和死锁,合理设计系统以优化并发程序。

Gooffersmultipleapproachesforbuildingconcurrentdatastructures,includingmutexes,channels,andatomicoperations.1)Mutexesprovidesimplethreadsafetybutcancauseperformancebottlenecks.2)Channelsofferscalabilitybutmayblockiffullorempty.3)Atomicoperationsareef

go'serrorhandlingisexplicit,治疗eRROSASRETRATERTHANEXCEPTIONS,与pythonandjava.1)go'sapphifeensuresererrawaresserrorawarenessbutcanleadtoverbosecode.2)pythonandjavauseexeexceptionseforforforforforcleanerCodebutmaymobisserrors.3)

whentestinggocodewithinitfunctions,useexplicitseTupfunctionsorseParateTestFileSteSteTepteTementDippedDependendendencyOnInItfunctionsIdeFunctionSideFunctionsEffect.1)useexplicitsetupfunctionStocontrolglobalvaribalization.2)createSepEpontrolglobalvarialization

go'serrorhandlingurturnserrorsasvalues,与Javaandpythonwhichuseexceptions.1)go'smethodensursexplitirorhanderling,propertingrobustcodebutincreasingverbosity.2)

AnefactiveInterfaceoisminimal,clear and promotesloosecoupling.1)minimizeTheInterfaceForflexibility andeaseofimplementation.2)useInterInterfaceForeabStractionTosWapImplementations withCallingCallingCode.3)

集中式错误处理在Go语言中可以提升代码的可读性和可维护性。其实现方式和优势包括:1.将错误处理逻辑从业务逻辑中分离,简化代码。2.通过集中处理错误,确保错误处理的一致性。3.使用defer和recover来捕获和处理panic,增强程序健壮性。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

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

Dreamweaver Mac版
视觉化网页开发工具