Maison > développement back-end > Golang > le corps du texte

Comment convertir une représentation sous forme de chaîne d'un jour de la semaine en une valeur « time.Weekday » ?

Patricia Arquette
Libérer: 2024-10-30 17:55:03
original
411 Les gens l'ont consulté

How to Convert a String Representation of a Day of Week into a `time.Weekday` Value?

Analyser la représentation de chaîne du jour de la semaine en temps. Valeur du jour de la semaine

Problème :

Conversion d'une chaîne représentant un jour de la semaine dans un temps équivalent. La valeur du jour de la semaine présente un défi. Le package time n'inclut aucune fonctionnalité intégrée pour cette conversion.

Solution initiale :

Une approche initiale consiste à utiliser un tableau pour stocker le mappage entre le jour de chaînes de semaine et leurs valeurs time.Weekday correspondantes. Par exemple :

<code class="go">var daysOfWeek = [...]string{
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
}

func parseWeekday(v string) (time.Weekday, error) {
    for i := range daysOfWeek {
        if daysOfWeek[i] == v {
            return time.Weekday(i), nil
        }
    }

    return time.Sunday, fmt.Errorf("invalid weekday '%s'", v)
}</code>
Copier après la connexion

Optimisation recommandée :

Pour améliorer l'efficacité et la clarté de cette conversion, une carte est recommandée au lieu d'un tableau. Les cartes permettent des recherches plus rapides, ce qui entraîne des performances améliorées.

<code class="go">var daysOfWeek = map[string]time.Weekday{
    "Sunday":    time.Sunday,
    "Monday":    time.Monday,
    "Tuesday":   time.Tuesday,
    "Wednesday": time.Wednesday,
    "Thursday":  time.Thursday,
    "Friday":    time.Friday,
    "Saturday":  time.Saturday,
}

func parseWeekday(v string) (time.Weekday, error) {
    if d, ok := daysOfWeek[v]; ok {
        return d, nil
    }

    return time.Sunday, fmt.Errorf("invalid weekday '%s'", v)
}</code>
Copier après la connexion

Conseil :

Pour une solution robuste, une boucle for peut être utilisée pour initialiser en toute sécurité le dayOfWeek map.

<code class="go">var daysOfWeek = map[string]time.Weekday{}

func init() {
    for d := time.Sunday; d <= time.Saturday; d++ {
        daysOfWeek[d.String()] = d
    }
}</code>
Copier après la connexion

Flexibilité d'analyse supplémentaire :

La solution basée sur la carte offre un avantage par rapport à l'approche basée sur les tableaux. En ajoutant des paires clé-valeur supplémentaires à la carte, des valeurs valides supplémentaires peuvent être analysées sans modifier la logique d'analyse.

Par exemple, pour analyser à la fois les noms complets et courts à 3 lettres des jours de la semaine, la carte peut être étendu comme suit :

<code class="go">var daysOfWeek = map[string]time.Weekday{}

func init() {
    for d := time.Sunday; d <= time.Saturday; d++ {
        name := d.String()
        daysOfWeek[name] = d
        daysOfWeek[name[:3]] = d
    }
}</code>
Copier après la connexion

Cette solution étendue permet d'analyser des chaînes telles que "Mon" ou "Fri" dans leurs valeurs time.Weekday correspondantes.

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:php.cn
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