表題の通り。しかし+に変換すると、よろしくないことが起きる場合あります。
たとえば、LINEのシェアボタンのURLにつけるパラメータは、+は空白に展開されずそのまま+となる。LINE様のドキュメントにもパーセントエンコーディングせよと書いてある。
CONTENT KEYの説明
パーセントエンコーディング(utf-8)したテキスト情報の値を指定します。
とりあえず、このような関数を作って、url.QueryEncode後に+を%20に変換することにした。
// %で始まらない単独の+を検出
var regexEscapeURIComponent = regexp.MustCompile(`([^%])(\+)`)
func QueryPercentEncode(str string) string {
str = url.QueryEscape(str)
return regexEscapeURIComponent.ReplaceAllString(str, "$1%20")
}