2021年03月18日(木) [長年日記]
■ [go] GoでURLのパスを結合する
GolangでURLのパスをpath.Join()で結合しようとするとうまくいかない。
path.Join("http://localhost/", "api")
の結果は「http:/localhost/api」となり、ホスト名の前のスラッシュが1つ削除されてしまう。path.Join()はリファレンスに「The result is Cleaned.」とあり単に結合するだけではないため。
URLのパスを結合するには、例えばURL型を使って次のようにする。
func MyJoin(base string, p string) (string, error) { u, err := url.Parse(base) if err != nil { return "", err } u.Path = path.Join(u.Path, p) return u.String(), nil }
なお、path.Join()は末尾のスラッシュも削除するので、MyJoin()の結果にも末尾にスラッシュが付かないことに注意。