ホームページ > バックエンド開発 > Golang > Goの通貨コンバータ

Goの通貨コンバータ

Barbara Streisand
リリース: 2024-12-06 05:33:10
オリジナル
657 人が閲覧しました

Currency Converter In Go

皆さん!

Go で通貨コンバータを作成するためのさらに別の小さなミニプロジェクト!

これはシンプルですが楽しいプロジェクトで、経験に応じて 1 ~ 2 時間ほどかかると思います。これは、一方の端から通貨タイプ、変換先の通貨、および変換される金額を受け取ります。

最新の通貨データを取得するためにサードパーティ サービス (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. これらの詳細を使用して、API リクエストを Openxchangerates (最新の通貨換算レートを備えたサードパーティ サービス) に送信します
  3. 通貨と金額を換算
  4. 通貨と金額データをユーザーに出力します

使用したパッケージ:

  1. net/http - 為替 API
  2. への http リクエスト用
  3. github.com/charmbracelet/huh - TUI インターフェイス フォーム用
  4. github.com/charmbracelet/bubbles/list - 項目の汎用リストを参照するための機能が豊富です
  5. エンコード/json - API
  6. のデータをマーシャリングするため
  7. 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 
ログイン後にコピー

次に 2 番目のポイント、通貨換算の詳細を使用して API リクエストを Openxchangerates に送信する方法について説明します。

ここでは、サードパーティの通貨交換プラットフォームによって提供される 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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート