Go言語とpythonでurlをパースする


python

# coding=utf-8
from urlparse import urlparse, parse_qs


s = "http://www.cwi.nl:80/%7Eguido/Python.html?a=b#f"

u = urlparse(s)

print u
# スキーム
print u.scheme
# -> http

# ホスト
print u.netloc
# -> www.cwi.nl:80

# ポート番号とhostnameを分ける
h = u.netloc.split(':')
print h[0]
# -> www.cwi.nl
print h[1]
# -> 80

# パス
print u.path
# -> /%7Eguido/Python.html

# フラグメント
print u.fragment
# -> f

# クエリ
print u.query
# -> a=b

#  クエリパラメータをmapにする
m = parse_qs(u.query)
print m
# -> {'a': ['b']}

# クエリパラメータを取得
print m['a'][0]
# -> b


同じことをgoで

package main

import "fmt"
import "net/url"
import "strings"

func main() {

	s := "http://www.cwi.nl:80/%7Eguido/Python.html?a=b#f"

	u, err := url.Parse(s)
	if err != nil {
		panic(err)
	}

	// スキーム
	fmt.Println(u.Scheme)
	// -> http

	// ホスト
	fmt.Println(u.Host)
	// -> www.cwi.nl:80

	// ポート番号とhostnameを分ける
	h := strings.Split(u.Host, ":")
	fmt.Println(h[0])
	// -> www.cwi.nl
	fmt.Println(h[1])
	// -> 80

	// パス
	fmt.Println(u.Path)
	// -> /~guido/Python.html

	// フラグメント
	fmt.Println(u.Fragment)
	// -> f

	// クエリ
	fmt.Println(u.RawQuery)
	// -> a=b

	// クエリパラメータをmapにする
	m, _ := url.ParseQuery(u.RawQuery)
	fmt.Println(m)
	// -> map[a:[b]]

	// クエリパラメータを取得
	fmt.Println(m["a"][0])
	// -> b
}

あまり変わらない感じ