gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:32:52 25 4
gpt4 key购买 nike

我正在从 API 获取一些数据,我想在我的 Go 应用程序的 REST 端点中提供这些数据。

结构是这样的:

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

//
var StockDataMap Stock

如果在控制台中打印,它看起来就像它应该的那样。

我的 Controller 是这样的:

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 开发网络应用的好文章;

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. Handler 通常用作 http 处理程序的后缀。

我鼓励您阅读 Effective Go 文章,以帮助您将当前的开发模型映射到 Go;

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

关于命名,您可以查看此幻灯片;

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

关于json - 如何在 REST 端点中将结构作为有效 JSON 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47928600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com