将API请求函数传递给另一个函数GoLang

时间:2016-03-13 13:41:27

标签: json go

我正在对特定html模板的页面加载发出api请求。这会导致问题所以我想在程序运行时进行api调用,以便在查看html页面时可以访问数据。

所以我是GoLang的新手,当我在main中调用它时,我无法理解传递给这个函数的参数。

func RequestTopMovies(w http.ResponseWriter, r *http.Request) {
  res, err := http.Get(url)
      if err != nil {
        panic(err)
      }
      defer res.Body.Close()

      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        panic(err)
      }
      var p Payload

      err = json.Unmarshal(body, &p)
      if err != nil {
        panic(err)
      }
      for i := 0; i < len(p.Results); i++ {
       fmt.Println(p.Results[i].Overview) // Prints to your terminal
    }
}

所以现在我已经在p.Results中得到了回应。

我希望能够在我的程序中的其他位置访问此数据。我以为我可以调用这个函数。

那我怎么能在main中调用这个函数呢?

func main() {
  RequestTopMovies(http.ResponseWriter, http.Request)
  http.HandleFunc("/", mainHandler)
  http.HandleFunc("/about", aboutHandler)
  http.HandleFunc("/TopPicks", TopMoviesHandler)
  http.ListenAndServe(":8080", nil)
}

如何将此函数传递给另一个函数以使其返回响应?

1 个答案:

答案 0 :(得分:2)

RequestTopMovies是一种http.Handler类型,它将作为处理程序函数(即控制器)自动调用。

要访问收到的数据,请使用上下文(检查大猩猩/上下文)或只创建一个切片或映射来保存数据结构,以便您可以从代码中的其他位置访问它,即

var Temp = map[string]Payload{}

一旦您解组了数据,就像

一样存储它
Temp[key] = p

然后在其他处理程序中,你可以抓取像

这样的数据
func SomeHandler(rw http.ResponseWriter, *http.Request) {
        p := Temp[key]
        // ...
}