anomalocaristan’s blog

JSやGo、設計などについて学んだことをメモしておくサイトです

【Go】クエリストリングを複数投げたのに取得できない時

経緯

GoでAPI書いていて http://localhost:2000/hogehoge?name=yeee&age=fugaa みたいなリクエスト投げたのにちゃんと取得出来なくて3日くらい悩んだのに、すごい初歩的な事が原因だった。

原因

そもそもGo側の問題じゃなかった。 ターミナルからcURL叩いてたのが原因・・・というか、エスケープをちゃんとしてなかったのが原因だった。

# ダメな例
$ curl http://localhost:2000/hogehoge?name=yeee&age=fugaaa

# ちゃんと通る例(&をエスケープしてる)
$ curl http://localhost:2000/hogehoge?name=yeee\&age=fugaaa

備考

&ってシェル上だと この処理バックグラウンドでやってね〜ヨロシク〜 って意味になるらしいので、エスケープして「この&は無害な&です」と明示する必要があった。

ちょっとしたことだけど参照先の記事がなければ永遠にGo側の問題だと思って沼にハマっていたので(もはやハマっていたけど)感謝。 ちなみにURL部分を シングルクォート で囲んでもいけた。

$ curl `http://hogehoge:2000/fuga?name=yeee&age=fugaaa`

参考サイト様

cURLコマンドで「クエリ文字列が在るURL」を扱うときはURLを囲もう、という話 | Developers.IO

【 & 】 コマンドをバックグラウンドで実行する | 日経クロステック(xTECH)