[英]How do I return a struct as valid JSON in a REST endpoint?
我正在从API中获取一些数据,我希望通过Go应用程序在REST端点中提供这些数据。
结构是这样的:
type Stock struct {
Stock string `json:"message_id,omitempty"`
StockData map[string]interface{} `json:"status,omitempty"`
}
//
var StockDataMap Stock
如果在控制台中打印,它看起来应该像预期的那样。
我的控制器就是这样:
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))
}
打印StockDataMap
产生一个key:hashtable,这就是我想要的。 但是,当访问http://localhost:8081/stocks
,它不返回任何内容。
returnStocksFromMemory肯定是问题所在。 但是,如何在其中将结构返回到有效的JSON? 现在,它是空的。
看起来您来自Ruby或另一种语言,其中尾位置的值是返回值,并且异常用于处理错误。 在Go中,您需要同时明确处理错误和返回。
这是在Go中开发Web应用程序的好文章。
https://golang.org/doc/articles/wiki/
根据您的returnStocksFromMemory,我将进行以下更改以确保您使用新名称适当地更新HandleFunc:
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
。 函数名称的更改有两个:
我鼓励您阅读“有效的Go”文章,以帮助您将当前的开发模型映射到Go。
https://golang.org/doc/effective_go.html
在命名时,您可以查看此幻灯片。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.