問題:
日を表す文字列の変換週の値を同等の時間に変換します。平日の値には課題があります。時間パッケージには、この変換のための組み込み機能が含まれていません。
初期の解決策:
最初のアプローチは、配列を利用して日間のマッピングを保存することです。週の文字列とそれに対応する time.Weekday 値。例:
<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>
推奨される最適化:
この変換の効率と明確性を高めるために、配列の代わりにマップを使用することをお勧めします。マップにより検索が高速化され、パフォーマンスが向上します。
<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>
ヒント:
堅牢なソリューションの場合、for ループを使用して daysOfWeek を安全に初期化できます。 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>
さらなる解析の柔軟性:
マップベースのソリューションには、配列ベースのアプローチよりも利点があります。追加のキーと値のペアをマップに追加すると、解析ロジックを変更せずに追加の有効な値を解析できます。
たとえば、曜日の完全名と 3 文字の短縮名の両方を解析するには、マップを次のようにします。次のように拡張されます:
<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>
この拡張ソリューションにより、「Mon」や「Fri」などの文字列を対応する time.Weekday 値に解析できます。
以上が曜日の文字列表現を「time.Weekday」値に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。