如何创建一个动态路由来查询结构的部分。

huangapple go评论97阅读模式
英文:

How to create a dynamic route to query portions of a struct

问题

我正在尝试弄清楚如何创建一个动态路由,以便可以查询我的结构体的特定部分。
例如,假设我有以下结构体。

type News struct {
     Id int64 `json:"id"`
     Category string `json:"category"`
     ImageUrl string `json:"image_url"`
     Title string `json:"title"`
     Description string `json:"description"`
     Source string `json:"source"`
}

现在,我要如何创建一个路由,例如

localhost:1234/news?title="sometitle"&source="somesource"
英文:

I am trying to figure out how to create a dynamic route in which I can query certain portions of my struct.
For example, say I have the following struct.

type News struct {
     Id int64 `json:"id"`
     Category string `json:"category"`
     ImageUrl string `json:"image_url"`
     Title string `json:"title"`
     Description string `json:"description"`
     Source string `json:"source"`
}

Now, how would I create a route such as

localhost:1234/news?title="sometitle"&source="somesource

答案1

得分: 2

你可以像在你的问题中那样使用查询参数,并将任何已知字段作为条件来缩小搜索范围。

实际搜索这些字段的方式取决于数据存储的位置/方式-你在问题中没有指定这一点,所以我不知道你是要查询MongoDB、SQL数据库、内存中的映射等等。

你可以按照以下方式迭代查询参数:

http.HandleFunc("/news", func(w http.ResponseWriter, r *http.Request) {
  params := r.URL.Query()

  for field, values := range params {
      value := values[len(values)-1] // 这种类型的最后一个给定值
      // 使用字段/值逐渐构建查询
  }
})

如果你提供关于数据存储方式的更多信息,我可以给你一个更具体的答案,帮助你构建查询并检索匹配的记录。

英文:

You can just use query parameters like in your question and handle any known fields as criteria to narrow your search.

The way you actually search these fields depends on where / how your data is stored- you didn't specify this in your question, so I don't know if you're going to query MongoDB, an SQL DB, a map in memory...

You can iterate over your query parameters as follows:

http.HandleFunc("/news", func(w http.ResponseWriter, r *http.Request) {
  params := r.URL.Query()

  for field, values := range params {
      value := values[len(values)-1] // the last given value of this type
      // gradually build your query using field / value
  }
})

If you provide more information about how your data is stored, I can give you a more specific answer to help you build your query and retrieve the matching records.

huangapple
  • 本文由 发表于 2017年8月24日 14:30:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/45854441.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定