這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
由於眾所周知的原因,強大的 GFW 會引起 Go 語言編譯時間在對DNS相關進行測試時失敗。當然如果人品不錯,沒有公網串連,不受GFW的影響……還是會在網路相關的那部分包的測試中失敗。導致無法正常安裝 Golang。
錯誤資訊類似如下形式:
...test mathtest mimetest mime/multiparttest netTEST FAIL netmake[1]: Entering directory `/home/mikespook/bin/go/src/pkg/net'gotest -test.short -test.timeout=120rm -f _test/net.a8g -o _gotest_.8 cgo_stub.go dial.go dnsmsg.go fd_linux.go hosts.go ip.go ipsock.go iprawsock.go lookup.go net.go parse.go pipe.go sock.go tcpsock.go udpsock.go unixsock.go newpollserver.go fd.go file.go dnsconfig.go dnsclient.go port.go dialgoogle_test.go dnsname_test.go file_test.go hosts_test.go ip_test.go ipraw_test.go multicast_test.go net_test.go parse_test.go pipe_test.go port_test.go server_test.go srv_test.go timeout_test.gorm -f _test/net.agopack grc _test/net.a _gotest_.8 --- FAIL: net.TestLookupCNAME (0.02 seconds)LookupCNAME("www.google.com.") = "www-g-com-chn.l.google.com.", <nil>, want "www.l.google.com.", nilFAILgotest: "./8.out -test.short=true -test.timeout=120" failed: exit status 1make[1]: *** [testshort] Error 2make[1]: Leaving directory `/home/mikespook/bin/go/src/pkg/net'make: *** [net.testshort] 錯誤 1
解決這個問題的辦法很簡單,之前在推上我也有發過。但是自己安裝 Golang 的時候遇到網路異常,卻經常忘記這個設定,接二連三的要動手查 Makefile 。隨記錄於此,方便備查。
按照 Golang weekly.2011-04-13 版本來說,$GOROOT/src/pkg/Makefile 檔案、205-208 行是用於屏蔽無外網情況下測試的:
# Disable tests that depend on an external network.ifeq ($(DISABLE_NET_TESTS),1)NOTEST+=net syslogendif
我們看到一個環境變數 $DISABLE_NET_TESTS,當其等於 1 時就可以屏蔽外部網路測試。
因此,在 shell 中設定這個環境變數:
export DISABLE_NET_TESTS=1
即可正常編譯 Golang 了。