go-pathmatch/README.md

89 lines
1.9 KiB
Markdown
Raw Normal View History

# go-pathmatch
A library that provides *pattern matching* for paths, for the Go programming language.
For example, a path could be a file system path, or a path could be a path from a URL (such as an HTTP or HTTPS based URL).
## Documention
Online documentation, which includes examples, can be found at: http://godoc.org/github.com/reiver/go-pathmatch
[![GoDoc](https://godoc.org/github.com/reiver/go-pathmatch?status.svg)](https://godoc.org/github.com/reiver/go-pathmatch)
## Example Usage
2019-06-21 00:11:35 +00:00
```go
import (
"github.com/reiver/go-pathmatch"
)
// ...
2019-06-21 20:05:56 +00:00
var pattern pathmatch.Pattern
2019-06-21 20:16:25 +00:00
err := pathmatch.CompileTo(&pattern, "/users/{user_id}/vehicles/{vehicle_id}")
if nil != err {
2019-06-21 20:05:56 +00:00
fmt.Fprintf(os.Stdout, "ERROR: %s\n", err)
return
}
var userId string
var vehicleId string
2019-06-21 20:05:56 +00:00
matched, err := pattern.Find("/users/bMM_kJFMEV/vehicles/o_bcU.RZGK", &userId, &vehicleId)
if nil != err {
2019-06-21 20:05:56 +00:00
fmt.Fprintf(os.Stdout, "ERROR: %s\n", err)
return
}
2019-06-21 20:05:56 +00:00
if !matched {
fmt.Println("The patch did not match.")
return
}
2019-06-21 20:05:56 +00:00
fmt.Println("The path matched!")
fmt.Printf("user_id = %q \n", userId) // user_id = "bMM_kJFMEV"
fmt.Printf("vehicle_id = %q \n", vehicleId) // vehicle_id = "o_bcU.RZGK"
```
Alternatively:
```go
import (
"github.com/reiver/go-pathmatch"
)
// ...
2019-06-21 20:05:56 +00:00
var pattern patchmatch.Pattern
2019-06-21 20:16:25 +00:00
err := pathmatch.CompileTo(&pattern, "/users/{user_id}/vehicles/{vehicle_id}")
if nil != err {
2019-06-21 20:05:56 +00:00
fmt.Fprintf(os.Stdout, "ERROR: %s\n", err)
return
}
data := struct{
UserId string `match:"user_id"`
VehicleId string `match:"vehicle_id"`
}{}
2019-06-21 20:17:44 +00:00
matched, err := pattern.FindAndLoad("/users/bMM_kJFMEV/vehicles/o_bcU.RZGK", &data)
if nil != err {
2019-06-21 20:05:56 +00:00
fmt.Fprintf(os.Stdout, "ERROR: %s\n", err)
return
}
2019-06-21 20:05:56 +00:00
if !matched {
fmt.Println("The patch did not match.")
return
}
2019-06-21 20:05:56 +00:00
fmt.Println("The path matched!")
fmt.Printf("user_id = %q \n", data.UserId) // user_id = "bMM_kJFMEV"
fmt.Printf("vehicle_id = %q \n", data.VehicleId) // vehicle_id = "o_bcU.RZGK"
```