Golang API/time.TimeオブジェクトのUnmarshalに関する質問
Golangを最近始めたのですが、どうもUnmarshalがうまくいかず、調べても解決できなかったため質問させてください。
POSTMANを使いPOSTメソッドでデータを送信しています。
POST methodのFunction
go
1""" 2controllers.goのPOST Methodの関数 3""" 4func CreateProblem(w http.ResponseWriter, r *http.Request) { 5 CreateProblem := &models.Problem{} 6 body, err := ioutil.ReadAll(r.Body) 7 if err != nil { 8 return 9 } 10 fmt.Println(string(body)) ------ (1) 11 utils.ParseBody(r, CreateProblem) 12 b := CreateProblem.CreateProblem() 13 fmt.Println("printing DT") 14 fmt.Println(b.FinishedDT) ------ (2) 15 res, _ := json.Marshal(b) 16 w.WriteHeader(http.StatusOK) 17 w.Write(res) 18}
console
1controllers.goの(1)を実行後(POSTMANから実際に送ったデータ)は以下がプリント 2{ 3 "number": 122, 4 "title": "String Manupulation", 5 "difficulty": "easy", 6 "date": "2022-01-01" 7} 8Unmarshalされた後の日付はこのようなものをプリント 90001-01-01 00:00:00 +0000 UTC
このUnmarshalでPOSTMANで指定した"2022-01-01"が返ってこないのがとても不思議です。ネットで調べた上で、time.TimeをどのようにUnmarshalするか試行錯誤しましたが、特にParsebodyのReadAllでbodyをstringにしたのちどのようにすれば良いのかがわからないです。CreatedDateを追加するというソースは出てきましたが、僕がやりたいのは日にちとフォーマットを指定したdate: "yyyy-mm-dd"を返すというものです。
また、model.go, unmarshalしているutils.goは以下のようになっております。
go
1""" 2utils.goの中身 3""" 4func ParseBody(r *http.Request, x interface{}) { 5 if body, err := ioutil.ReadAll(r.Body); err == nil { 6 if err := json.Unmarshal([]byte(body), x); err != nil { 7 return 8 } 9 } 10}
go
1""" 2model.goの中身 3""" 4var db *gorm.DB 5 6type Problem struct { 7 gorm.Model 8 Number int `gorm:"" json:"number"` 9 Title string `json:"title"` 10 Difficulty string `json:"difficulty"` 11 FinishedDT Date `json:"date"` 12} 13 14type Date struct { 15 time.Time 16} 17 18func init() { 19 config.Connect() 20 db = config.GetDB() 21 // automigrate empty problem 22 db.AutoMigrate(&Problem{}) 23} 24 25// functions to communicate with database 26 27func (b *Problem) CreateProblem() *Problem { 28 // gorm function 29 db.NewRecord(b) 30 db.Create(&b) 31 return b 32}
現在このような構成でプロジェクトがあります。
(RESTfulAPI) ├── (cmd) │ └── main.go │ ├── (pkg) │ ├── (config) │ └──── app.go │ │ ├── (controllers) │ └──── controllers.go │ │ ├── (models) │ └──── model.go │ │ ├── (routes) │ └──── route.go │ │ ├── (utils) │ └──── utils.go │ ├── go.mod └── go.sum
どうぞ宜しくおねがいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/08 01:07
2022/01/10 09:58