Maison > développement back-end > Golang > Convertisseur de devises en Go

Convertisseur de devises en Go

Barbara Streisand
Libérer: 2024-12-06 05:33:10
original
623 Les gens l'ont consulté

Currency Converter In Go

Hé les gars !

Encore un petit mini-projet pour réaliser un convertisseur de devises dans Go !

C'est un projet simple mais amusant qui devrait prendre environ une heure ou deux à quelqu'un selon son expérience. Il faut un type de devise à une extrémité, la devise dans laquelle nous avons l'intention de convertir et le montant à convertir.

J'utilise un service tiers (https://openexchangerates.org) pour récupérer les dernières données sur les devises.

Mes principales devises de base sont :

1) USD
2) EUR
3) GBP
4) JPY
Copier après la connexion
Copier après la connexion

et j'ai également un support pour les "autres" devises via la saisie dans le TUI. Tant pour les devises de base que pour les devises à convertir.

~ Code source : trouvé ici


Commençons

What is your base currency?

                              List             

$ USD               
United States Dollar

£ GBP               
British Pound

€ EUR       
Euro        

¥ JPY       
Japanese Yen       


  •••          
Copier après la connexion
Copier après la connexion

Les principales fonctionnalités de l'application sont :

  1. Obtenir les détails de la conversion saisis par l'utilisateur
  2. Utilisez ces détails et envoyez une demande API à Openxchangerates (service tiers avec les derniers taux de conversion de devises)
  3. Convertir les devises et le montant
  4. Devises de sortie et données de montant à l'utilisateur

Les forfaits utilisés :

  1. net/http - pour les requêtes http vers l'API de change
  2. github.com/charmbracelet/huh - pour le formulaire d'interface TUI
  3. github.com/charmbracelet/bubbles/list - riche en fonctionnalités pour parcourir une liste d'éléments à usage général
  4. encoding/json - afin de rassembler les données pour l'API
  5. github.com/charmbracelet/lipgloss - Définitions de styles pour les dispositions de terminaux

Comment ça marche ?

Parlons donc de la première fonctionnalité, qui consiste à obtenir les détails de la conversion de l'utilisateur.

Une méthode d'affichage pour obtenir ces données fournies par l'utilisateur a dû être créée et elle pose à l'utilisateur des questions sur la devise à convertir, la devise à convertir, et plus encore.

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 ""
    }
}
Copier après la connexion
What do you want to convert to?

                                  List             

$ USD               
United States Dollar

£ GBP               
British Pound       


  •••        
Copier après la connexion
How much to convert?

                    > 200 
Copier après la connexion

Parlons maintenant du deuxième point, en utilisant les détails de la conversion de devise et en envoyant une requête API à Openxchangerates.

Ici, j'obtiens/récupère les derniers taux de change sur Openxchangerates.org via une clé API fournie par la plateforme de change tierce. Dans mon cas, j'ai utilisé les .env pour la gestion des secrets mais il existe une multitude d'autres façons de mieux gérer cela, surtout s'il s'agissait d'une application de production.

~ Documents Openxchangerates.org utilisés pour cela : situés ici

//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
}
Copier après la connexion

Ensuite, nous procéderons à la conversion des devises et des montants :

//conversion.go

package conversion

func Convert(amount float64, rateFrom, rateTo float64) float64 {
    return amount * (rateTo / rateFrom)
}
Copier après la connexion

qui prend simplement un montant de base (montant), un taux de la devise de base et le taux à convertir et renvoie un montant converti final.


Enfin, fournir à l'utilisateur les devises converties et les données relatives au montant.

Le contrôle de la logique derrière ces sélections est une fonction de mise à jour qui sert de gestionnaire principal de transition d'état pour le modèle de l'application.

1) USD
2) EUR
3) GBP
4) JPY
Copier après la connexion
Copier après la connexion
What is your base currency?

                              List             

$ USD               
United States Dollar

£ GBP               
British Pound

€ EUR       
Euro        

¥ JPY       
Japanese Yen       


  •••          
Copier après la connexion
Copier après la connexion

Conclusion

Cela conclut à peu près ce convertisseur de devises relativement rapide. J'espère que vous avez apprécié cette lecture rapide et n'hésitez pas à essayer également, ce n'est pas si mal ! ?.

N'hésitez pas à expérimenter également avec d'autres fournisseurs de change tiers, il y en a beaucoup. Espérons qu'ils disposent également d'une API décente !

À bientôt les gars pour le prochain ! ??

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal