https://github.com/deiu/linkheader
Link Header parser using Golang
https://github.com/deiu/linkheader
go golang header link
Last synced: about 1 year ago
JSON representation
Link Header parser using Golang
- Host: GitHub
- URL: https://github.com/deiu/linkheader
- Owner: deiu
- License: mit
- Created: 2017-06-06T01:02:40.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2017-06-08T19:30:58.000Z (about 9 years ago)
- Last Synced: 2025-04-11T05:58:29.754Z (about 1 year ago)
- Topics: go, golang, header, link
- Language: Go
- Size: 18.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# linkheader
Golang tool to parse and set Link headers
[](https://travis-ci.org/deiu/linkparser)
[](https://coveralls.io/github/deiu/linkparser?branch=master)
[](https://goreportcard.com/report/github.com/deiu/linkheader)
[](https://godoc.org/github.com/deiu/linkheader)
## Install
`go get -u github.com/deiu/linkparser`
## Usage
### Getting values from a Link header
The `ParseHeader()` function returns a map where link values are keyed based on `rel` values.
```golang
// the header value usually comes from an http.Request object, using
// req.Header.Get("Link")
header := `; rel="foo" title="hi", ; rel="bar"`
links = ParseHeader(header)
println(links["foo"]["href"]) // -> http://example.org
println(links["foo"]["title"]) // -> hi
println(links["bar"]["href"]) // -> http://test.com
```
### Setting values to a Link header
Golang's normal behavior when setting Link headers is a bit weird. For instance, doing something like `request.Header.Add("Link", headerValue)` several times with different values seems to append those values to the `Link` header slice. However, when reading back from that header with `request.Header.Get("Link")`, it only returns the first element of the slice. This behavior forced me to write my own function `AddLink()` to set multiple values to a Link header.
```golang
// the header value usually comes from an http.Request object, using
// req.Header.Get("Link")
oldHeader := req.Header.Get("Link")
println(oldHeader) // -> ""
// we need to build our list of parameters as per https://tools.ietf.org/html/rfc2068#section-19.6.2.4
params := map[string]string{"rel": "foo", "title": "bar"}
newHeader := AddLink(oldHeader, "http://example.org", params)
req.Header.Set("Link", newHeader)
oldHeader = req.Header.Get("Link")
println(oldHeader) // -> ; rel="foo"; title="bar"
params = map[string]string{"rel": "baz"}
newHeader = AddLink(oldHeader, "http://test.com", params)
req.Header.Set("Link", newHeader)
println(req.Header.Get("Link"))
// -> ; rel="foo"; title="bar", ; rel="baz"
```