質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
date

dateは、date型や日付に関する関数や処理についてのタグです

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

解決済

Golang API/time.TimeオブジェクトのUnmarshalに関する質問

Yuta_Hayashi
Yuta_Hayashi

総合スコア2

date

dateは、date型や日付に関する関数や処理についてのタグです

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1回答

0評価

0クリップ

288閲覧

投稿2022/01/07 15:06

Golang API/time.TimeオブジェクトのUnmarshalに関する質問

Golangを最近始めたのですが、どうもUnmarshalがうまくいかず、調べても解決できなかったため質問させてください。

POSTMANを使いPOSTメソッドでデータを送信しています。

POST methodのFunction

go

""" controllers.goのPOST Methodの関数 """ func CreateProblem(w http.ResponseWriter, r *http.Request) { CreateProblem := &models.Problem{} body, err := ioutil.ReadAll(r.Body) if err != nil { return } fmt.Println(string(body))      ------ (1) utils.ParseBody(r, CreateProblem) b := CreateProblem.CreateProblem() fmt.Println("printing DT") fmt.Println(b.FinishedDT)                  ------ (2) res, _ := json.Marshal(b) w.WriteHeader(http.StatusOK) w.Write(res) }

console

controllers.goの(1)を実行後(POSTMANから実際に送ったデータ)は以下がプリント { "number": 122, "title": "String Manupulation", "difficulty": "easy", "date": "2022-01-01" } Unmarshalされた後の日付はこのようなものをプリント 0001-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

""" utils.goの中身 """ func ParseBody(r *http.Request, x interface{}) { if body, err := ioutil.ReadAll(r.Body); err == nil { if err := json.Unmarshal([]byte(body), x); err != nil { return } } }

go

""" model.goの中身 """ var db *gorm.DB type Problem struct { gorm.Model Number int `gorm:"" json:"number"` Title string `json:"title"` Difficulty string `json:"difficulty"` FinishedDT Date `json:"date"` } type Date struct { time.Time } func init() { config.Connect() db = config.GetDB() // automigrate empty problem db.AutoMigrate(&Problem{}) } // functions to communicate with database func (b *Problem) CreateProblem() *Problem { // gorm function db.NewRecord(b) db.Create(&b) return b }

現在このような構成でプロジェクトがあります。

(RESTfulAPI) ├── (cmd) │ └── main.go │ ├── (pkg) │ ├── (config) │ └──── app.go │ │ ├── (controllers) │ └──── controllers.go │ │ ├── (models) │ └──── model.go │ │ ├── (routes) │ └──── route.go │ │ ├── (utils) │ └──── utils.go │ ├── go.mod └── go.sum

どうぞ宜しくおねがいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

date

dateは、date型や日付に関する関数や処理についてのタグです

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。