前提・実現したいこと
golang(+gin+gorm)で、webアプリを作成しています。
下記のような構造体PostA(マイグレーション用)のCreatedAt
フィールドがあります。
Go
1type PostA struct { 2 ID uint 3 CreatedAt time.Time //2021-04-03T00:16:13.320376Z 4 UpdatedAt time.Time 5}
フィールドCreatedAt
はtime.Time
型なので2021-04-03T00:16:13.320376Z
の形です。
これをREADしてreturnする前に、
YYYY/MM/DD hh:mm
のフォーマットへ整形し、2021/04/03 00:16
としたいです。
そして、フィールドCreatedAt
に格納し直し、下記のようにsliceにした形でreturnしたいです。
Go
1records := []PostA{} 2...(中略) 3return records
発生している問題・エラーメッセージ
しかし、フィールドCreatedAtをフォーマットするため下記のようにすると、
Go
1records[i].CreatedAt = records[i].CreatedAt.Format("2006/1/2 15:04") //型エラー
time.Format
はstring
型に変換するので、
PostAのフィールドCreatedAt
(time.Time型)に格納し直すことができません。
知見のある方・お詳しい方、このケースで、どのようにすれば良いかを教えていただけませんでしょうか。
以下、私が考えた案です。
案1:
別の構造体PostBを用意して、string型でDBからレコードを取得し、正規表現などでフォーマットする。
Go
1type PostB struct { 2 ID uint 3 CreatedAt string //2021-04-03T00:16:13.320376Z 4} 5 6...(中略) 7records[i].CreatedAt = records[i].CreatedAt.Format("2006/1/2 15:04") //型エラー 8...(略)
しかし、time.Format()
は当然string
型には使用できませんので、取得した文字列そのものを正規表現などでフォーマットする必要があります。
(そもそも構造体PostAは「DBテーブルをマイグレーションするために作成」したので、READに使用すべきではないと考え、新しい構造体PostBを使用する方法を考えました)
案2:
別の構造体PostBを用意して、元のtime.Time
型とは別にstring
型を格納するフィールドを用意し、変換して格納する。
Go
1type PostB struct { 2 ID uint 3 CreatedAt time.Time //2021-04-03T00:16:13.320376Z 4 CreatedAtStr string //2021/04/03 00:16 5} 6...(中略) 7records[i].CreatedAtStr = records[i].CreatedAt.Format("2006/1/2 15:04") 8...(略)
案3:
その他
実務でgolangおよび構造体の取扱をしたことがなく勘所がわからず、お詳しい方にご教示いただきたく思います。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/05 14:48 編集