繁体   English   中英

如何在REST端点中将结构作为有效JSON返回?

[英]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 函数名称的更改有两个:

  1. 惯用Go使用简洁的名称。
  2. 处理程序通常用作http处理程序的后缀。

我鼓励您阅读“有效的Go”文章,以帮助您将当前的开发模型映射到Go。

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

在命名时,您可以查看此幻灯片。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM