2017-12-21 27 views
-1

GoアプリケーションからRESTエンドポイントで提供したいAPIからデータを取得しています。RESTエンドポイントで有効なJSONとして構造体を返すにはどうすればよいですか?

構造体のようなある:

type Stock struct { 
    Stock  string   `json:"message_id,omitempty"` 
    StockData map[string]interface{} `json:"status,omitempty"` 
} 

// 
var StockDataMap Stock 

、コンソールに印刷された場合、それがになっていて、それが見えます。

私のコントローラのようなある:ハッシュテーブル、私が欲しいものです:キーでStockDataMap結果を印刷

package lib 

import (
    "net/http" 
    "log" 
    "encoding/json" 
) 

func returnStocksFromMemory(w http.ResponseWriter, r *http.Request) { 
    json.Marshal(StockDataMap) 
} 


// Expose controller at http://localhost:8081/ 
func StockMarketDataController() { 
    http.HandleFunc("/stocks", returnStocksFromMemory) 
    log.Fatal(http.ListenAndServe(":8081", nil)) 
} 

。ただし、http://localhost:8081/stocksにアクセスすると何も返されません。

returnStocksFromMemoryは確かに問題です。しかし、そこで有効なJSONに構造体を戻すにはどうしたらいいですか?今のところ、それは空であると言われています。

+0

'json.Marshal'は、符号化されたJSONでエラーバイトスライスを返します。両方を破棄し、レスポンスライターには書き込みを行わないので、ブラウザに何も出力されません。 ['json'パッケージはよく文書化されています](https://golang.org/pkg/encoding/json/)。 – Adrian

+0

クライアントに何らかの応答データを返すためには、*ハンドラ*はまずそのデータをレスポンスに書き込む必要があります。これは 'http.ResponseWriter'インタフェースが来る場所です。クライアントが受け取る任意のバイトを書くことができます。レスポンスボディ。したがって、ハンドラはクライアントにデータを返すために 'w'を使用しなければなりません。クライアントは空のボディを取得しません。 – mkopriva

答えて

2

あなたはRubyや末尾位置の値が戻り値と例外がエラーを処理するために使用されている別の言語から来ているように見えます。 Goでは、エラー処理とリターンの両方を明示する必要があります。

これはGoでWebアプリケーションを開発するための優れた記事です。あなたの私は、あなたが適切に新しい名前でHandleFuncを更新確実に次の変更を行いますreturnStocksFromMemoryの面では

https://golang.org/doc/articles/wiki/

:あなたのコードが概説されるよう

func stocksHandler(w http.ResponseWriter, r *http.Request) { 
    enc := json.NewEncoder(w) 
    err := enc.Encode(StockDataMap) 
    if err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
     return 
    } 
} 

注それだけ{}を返します。 StockDataMapに値を設定する必要があります。関数名の変更は2倍です。

  1. idiomatic goは簡潔な名前を使用します。
  2. 一般に、ハンドラはhttpハンドラの後置符号として使用されます。

現在の開発モデルをGoにマッピングするのに役立つEffective Goの記事を読むことをお勧めします。あなたはこのスライドデッキを確認することができ、物事を命名オン

https://golang.org/doc/effective_go.html

https://talks.golang.org/2014/names.slide#1

関連する問題