如何从 HTTP 处理程序中的 URL 获取参数
How to get parameters from URL in HTTP handler
我正在开发一个 Web 服务应用程序,endpoint/crypto/rates 接受两个货币“符号”作为输入。 web 服务应该在数据库中搜索这些字符之间的货币交换数据,如果数据库中没有值,或者时间戳值与当前值相差超过 1 分钟,则向服务发出请求 API:
https://min-api.cryptocompare.com/documentation
所以,我创建了结构和 go-chi 路由器。但是我不知道如何构建一个工作处理程序来从 URL 获取参数,例如:https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=USD
package main
import (
"github.com/go-chi/chi"
"net/http"
)
type Crypto struct {
Cur1 string
Cur2 string
Rate float64
Timestamp int64
}
func main() {
port := ":3000"
r := chi.NewRouter()
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Connected"))
})
http.ListenAndServe(port, r)
我想我可以尝试为处理程序主体上的第一个值创建 Cur1:
cur1 = r.FormValue("cur1")
与第二个值类似:
Cur2 = r.FormValue("cur2")
最终请求将是:~/get_rates?cur1=eth&cur2=btc
您可以通过调用 getter r.URL.Query().Get("paramName")
从请求中提取查询参数
为您的任务提取 cur1 和 cur2 将是这样的:
r.Get("/get_rates", func(w http.ResponseWriter, r *http.Request) {
cur1 := r.URL.Query().Get("cur1")
cur2 := r.URL.Query().Get("cur2")
w.Write([]byte("cur1=" + cur1 + "; cur2=" + cur2))
})
我正在开发一个 Web 服务应用程序,endpoint/crypto/rates 接受两个货币“符号”作为输入。 web 服务应该在数据库中搜索这些字符之间的货币交换数据,如果数据库中没有值,或者时间戳值与当前值相差超过 1 分钟,则向服务发出请求 API: https://min-api.cryptocompare.com/documentation 所以,我创建了结构和 go-chi 路由器。但是我不知道如何构建一个工作处理程序来从 URL 获取参数,例如:https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=USD
package main
import (
"github.com/go-chi/chi"
"net/http"
)
type Crypto struct {
Cur1 string
Cur2 string
Rate float64
Timestamp int64
}
func main() {
port := ":3000"
r := chi.NewRouter()
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Connected"))
})
http.ListenAndServe(port, r)
我想我可以尝试为处理程序主体上的第一个值创建 Cur1:
cur1 = r.FormValue("cur1")
与第二个值类似:
Cur2 = r.FormValue("cur2")
最终请求将是:~/get_rates?cur1=eth&cur2=btc
您可以通过调用 getter r.URL.Query().Get("paramName")
为您的任务提取 cur1 和 cur2 将是这样的:
r.Get("/get_rates", func(w http.ResponseWriter, r *http.Request) {
cur1 := r.URL.Query().Get("cur1")
cur2 := r.URL.Query().Get("cur2")
w.Write([]byte("cur1=" + cur1 + "; cur2=" + cur2))
})