みずりゅの自由帳

主に参加したイベントやソフトウェア技術/開発について記録しています

GolangのListenAndServerで「missing port in address」が出た時に対応したこと

Go言語で「http.ListenAndServe」を使った際に、エラーメッセージ「missing port in address」が出た時の対処メモ。

もっとも、オチは「渡す引数の設定値を間違えていた」というポカミスで、恥ずかしい限りなのですが。


Goのバージョンが「go1.9.1」での話です。が、他のバージョンでも違いはない認識です。

間違えていた内容は、引数「addr」に対してコロンをつけていなかった、というもの。
例えば、ローカルホストでポート番号8080で渡す場合には、「":8080"」と指定します。

    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal("ListenAndServer::", err)
    }

ここを、間違って「":"」(コロン)をつけ忘れて実行すると、「 listen tcp: address 8080: missing port in address 」のエラーメッセージが出てきます。

$ go run main.go
2018/09/01 20:00:00 ListenAndServer::listen tcp: address 8080: missing port in address
exit status 1

「Go言語によるWebアプリケーション開発」の写経を開始した直後、このエラーメッセージが出ました。

コンパイルエラーは出ていなかったので写経したコード側には問題が無いと思いこんでいて、ウィルス対策ソフトや使用中のポート、ファイアウォールでポートが閉じている等を疑って調べていました。

それでも変わらないのでネット上のコードをコピペしてみると動いたので、やっとこの時点で写経したコードに誤りがあると気づけました。
まず疑うべきは自分のコードという点を心に刻んでおかないと駄目ですね。

www.oreilly.co.jp


ちなみに、渡す引数を「";8080"」のように「;(セミコロン)」で間違っていた仮定した場合は、以下のようになります。

$ go run main.go
2018/09/01 20:00:00 ListenAndServer::listen tcp: address ;8080: missing port in address
exit status 1

この場合はエラーメッセージには「";"」が入っているので、間違いには気づきやすいですね。

そもそも、引数名は「addr」となっているのですから、「"127.0.0.1:8080"」のように渡すものと意識していれば防げたのかなと思います。