2001 と記述するとまともに解釈されない。
バグ状態だとこの表現 > 16010-10-16
これ
<a href="/news/2024-10-16-released/"><img src="/img/banner_release.png" alt="any">
news title!! <span class="date">|16010-10-16</span></a>
修正コード
- {{.Title}} <span class = "date">|{{ .Date.Format "2001-01-02"}}</span>
+ {{.Title}} <span class = "date">|{{ .Date.Format "2006-01-02"}}</span>
正しいフォーマットは下記の通りで、間違った記述は 月
と解釈されたため、表示が狂った。
// 正しいフォーマット
.Date.Format "2006" // 年のみ
.Date.Format "01" // 月のみ
.Date.Format "02" // 日のみ
.Date.Format "15:04:05" // 時:分:秒
.Date.Format "2006-01-02 15:04:05" // フル日時
// 誤ったフォーマット(使用してはいけない)
.Date.Format "2001" // ❌ 年の指定が間違い
.Date.Format "2020" // ❌ 年の指定が間違い
.Date.Format "YYYY-MM-DD" // ❌ これはGoのフォーマットではない
実データをフォーマット扱いにするの普通に悪手にしか思えないが何かしらの思想がきっとあるに違いないのでこの後調べる。
Claude の回答
claude へのプロンプト
Go 言語の日付フォーマットの設計思想は実に興味深いものです。
一般的な日付フォーマット指定との比較から説明します:
従来の日付フォーマット(多くの言語):
Y: 年を表す
M: 月を表す
D: 日を表す
H: 時を表す
m: 分を表す
s: 秒を表す
問題点:
フォーマット文字が恣意的
大文字小文字の区別が必要(MM は month、mm は minute)
暗記が必要
文字の意味を理解していないと使えない
Go の日付フォーマット:
Copy2006-01-02 15:04:05 -0700 MST
設計思想:
実装例:
より複雑な例:
利点:
直感的
自己説明的
一貫性
エラー検出
この設計は、Go 言語の「シンプルさ」「明示性」「実用性」という core values を強く反映しており、言語設計の一貫性を示す良い例となっています。
一見変わった方式に見えますが、実際の使用では非常に実用的で、学習コストも低く、エラーも起きにくい設計となっています。これは「実装の詳細を隠蔽する」のではなく、「明示的に示す」という Go 言語の思想を体現しているといえます。