メモの日々


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()の結果にも末尾にスラッシュが付かないことに注意。