Skip to content

Instantly share code, notes, and snippets.

@koron
Created November 29, 2016 06:17
Show Gist options
  • Save koron/367b165be32f8b355f91fe0e7107998f to your computer and use it in GitHub Desktop.
Save koron/367b165be32f8b355f91fe0e7107998f to your computer and use it in GitHub Desktop.
golangのhttpクライアントがアクセスしたURLは、query paramsの順番がバラバラでわかりにくいので、それをソートしてLTSVに変換する。各行にURLがあれば変換したLTSVを、なければ空行を出力する。
package main
import (
"fmt"
"log"
"net/url"
"regexp"
"sort"
"github.com/koron/go-dia"
)
func main() {
rx := regexp.MustCompile(`https?://\S+`)
err := dia.For(func(line string) error {
m := rx.FindString(line)
if m == "" {
fmt.Println()
return nil
}
u, err := url.Parse(m)
if err != nil {
fmt.Printf("ERROR: %s\n", err)
return nil
}
q := u.Query()
list := keys(q)
sort.Strings(list)
u.RawQuery = ""
fmt.Printf("_path:%s", u.String())
for _, k := range list {
fmt.Printf("\t%s:%s", k, q.Get(k))
}
fmt.Println()
return nil
})
if err != nil {
log.Fatal(err)
}
}
func keys(v url.Values) []string {
r := make([]string, 0, len(v))
for k, _ := range v {
r = append(r, k)
}
return r
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment