Gin と Go を使用して REST API を開発する場合、空のリクエスト本文の問題が発生することは珍しくありません。ここでは、この問題の背後にある理由を詳しく調べ、それに対処するための解決策を検討します。
fmt.Printf("%s" を使用してリクエスト本文を直接印刷する場合) 、c.Request.Body)、実際の本文の値を抽出していません。 c.Request.Body は ReadCloser 型で、読み取り可能および閉じることが可能なデータ ストリームを表すインターフェイスになります。
テスト目的、リクエスト本文を文字列に読み込んで出力できます:
<code class="go">x, _ := ioutil.ReadAll(c.Request.Body) fmt.Printf("%s", string(x))</code>
注: このメソッドは学習とデモのみを目的としています。これは、リクエスト ボディを解析するための実用的なソリューションではありません。
リクエスト ボディにアクセスするより堅牢な方法は、Gin のバインディング機能を使用することです。これにより、自動的に解析され、リクエスト本文から設定されるデータ構造を指定できます。
<code class="go">type E struct { Events string } func events(c *gin.Context) { data := &E{} c.Bind(data) fmt.Println(data) c.JSON(http.StatusOK, c) }</code>
Bind() メソッドを使用して、Gin はリクエスト本文からのデータを E 構造体に設定します。
Gin のバインド メカニズムを使用する前に (最初の方法を使用して) リクエスト本文を直接読み取ることを避けることが重要です。これにより、競合や誤った解析が発生する可能性があります。
以上が私の Gin/Go API でリクエスト本文が空なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。