LoginSignup
1
1

More than 1 year has passed since last update.

Go言語の「アプリケーション なになに への接続を許可しますか? 」が何回も出てくる問題 (mac)

Last updated at Posted at 2023-01-03

「詳解GO言語WEBアプリケーション」の本(p127 kindole版はp130?)
を読んでいた時に少しハマったのでメモしておきます.
本: 詳解GO言語WEBアプリケーション

問題

「詳解GO言語WEBアプリケーション」の本(p127 kindole版はp130?)のコードを実行した際に
アプリケーション“main”へのネットワーク受信接続を許可しますか?
と出る.
この 承諾ボタン を押すのが一回きりならいいのですが, ctrl + c でプログラムを終了して,
再度プログラムを走らせる度に出てきます.
スクリーンショット 2022-12-30 16.37.02.png

コード

package main

import (
	"fmt"
	"net/http"
	"os"
)

func main() {
	err := http.ListenAndServe(
		":18080",
		http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			fmt.Fprintf(w, "Hello%s!", r.URL.Path[1:])
		}),
	)
	if err != nil {
		fmt.Printf("failed to terminate server: %v", err)
		os.Exit(1)
	}
}

結論

ポートの指定を ":18080" から "localhost:18080" に修正する

package main

import (
	"fmt"
	"net/http"
	"os"
)

func main() {
	err := http.ListenAndServe(
        // ここをlocalhost:18080に変える
		"localhost:18080",
		http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			fmt.Fprintf(w, "Hello%s!", r.URL.Path[1:])
		}),
	)
	if err != nil {
		fmt.Printf("failed to terminate server: %v", err)
		os.Exit(1)
	}
}

原因はportの指定を ":18080" のようにしているからです
":18080"は省略している書き方で 内部では "0.0.0.0:18080" としていることになっている
この 0.0.0.0 というのが問題で、これでサーバーを起動すると

このままだとMacの外部にポート開放しようとしてるけど大丈夫?という意味で
「ネットワーク受信接続を許可しますか?」
とMacのファイアウォールが聞いてくることになる

詳しい0.0.0.0の意味はこちらの記事を参考にすると良いと思います

解決方法は簡単で

":18080" から "localhost:18080" に修正するだけです

"localhost:18080" は "127.0.0.1:18080" を表している
"127.0.0.1" の部分はループバックアドレスと呼ばれていて、localhostでアクセスする時のアレです

ループバックアドレスとは?

ローカルループバックアドレスとは、自分自身を表す特別なIPアドレスの1つであり、TCP/IPが有効なコンピュータでは常に利用可能なIPアドレスです. 一般的には以下のIPアドレスが利用されます.

IPv4の場合: 127.0.0.1
IPv6の場合: ::1(0000:0000:0000:0000:0000:0000:0000:0001)

IPv4の場合、IPアドレスの最上位のバイト(最上位の8bit)の内容が「127」であればよいので
「127.0.0.1~127.255.255.254」の範囲内ならばどのIPアドレスでも利用できます
(「127.0.0.0」と「127.255.255.255」の2つはブロードキャストアドレスのため除外される)

ex)
127.0.0.2 や 127.1.2.3

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1