Параметры URL (net/http) GOLANG
Как используя стандартную библиотеку net/http вытащить поле name: localhost:8080/:name
у меня будет меняться название и нужно используя стандартную библиотеку получить из url name.
Ответы (2 шт):
Автор решения: Andrew
→ Ссылка
Не уверен что у вас параметр задан правильно, исходя из документации например. Чтобы извлечь параметр из адреса запроса достаточно использовать url.Parse:
urlStr := "https://example.com/?product=shirt&color=blue&newuser&size=m"
myUrl, _ := url.Parse(urlStr)
params, _ := url.ParseQuery(myUrl.RawQuery)
fmt.Println(params)
и так можно получить определенный параметр:
product := params.Get("product")
color := params.Get("color")
вот более полный пример:
package main
import (
"fmt"
"net"
"net/url"
)
func main() {
s := "postgres://user:[email protected]:5432/path?k=v#f"
u, err := url.Parse(s)
if err != nil {
panic(err)
}
fmt.Println(u.Scheme)
fmt.Println(u.User)
fmt.Println(u.User.Username())
p, _ := u.User.Password()
fmt.Println(p)
fmt.Println(u.Host)
host, port, _ := net.SplitHostPort(u.Host)
fmt.Println(host)
fmt.Println(port)
fmt.Println(u.Path)
fmt.Println(u.Fragment)
fmt.Println(u.RawQuery)
m, _ := url.ParseQuery(u.RawQuery)
fmt.Println(m)
fmt.Println(m["k"][0])
}
output:
$ go run url-parsing.go
postgres
user:pass
user
pass
host.com:5432
host.com
5432
/path
f
k=v
map[k:[v]]
v
Автор решения: Константин Иванов
→ Ссылка
В версии 1.22 Golang появились возможность такие url обрабатывать без парcинга самого url. Вот здесь подробно описано https://go.dev/blog/routing-enhancements