首頁 > 後端開發 > Golang > Go 中的貨幣轉換器

Go 中的貨幣轉換器

Barbara Streisand
發布: 2024-12-06 05:33:10
原創
625 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板