Closed
Description
What did you do?
# main.go
package main
import (
"fmt"
"io/ioutil"
"net"
"runtime"
)
func main() {
fmt.Println("GOOS:", runtime.GOOS)
p, err := ioutil.ReadFile("/etc/hosts")
fmt.Println("# /etc/hosts:")
fmt.Println(string(p))
addrs, err := net.LookupHost("localhost")
fmt.Println("net.LookupHost addrs:", addrs, "err:", err)
net.DefaultResolver.PreferGo = true
addrs, err = net.LookupHost("localhost")
fmt.Println("net.LookupHost addrs:", addrs, "err:", err)
}
$ GODEBUG=netdns=2 go run main.go
GOOS: darwin
# /etc/hosts:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
go package net: using cgo DNS resolver
go package net: hostLookupOrder(localhost) = cgo
net.LookupHost addrs: [::1 127.0.0.1] err: <nil>
go package net: hostLookupOrder(localhost) = cgo
net.LookupHost addrs: [] err: lookup localhost on 8.8.8.8:53: no such host
$ GODEBUG=netdns=go+2 go run main.go
GOOS: darwin
# /etc/hosts:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
go package net: GODEBUG setting forcing use of Go's resolver
go package net: hostLookupOrder(localhost) = files,dns
net.LookupHost addrs: [127.0.0.1 ::1] err: <nil>
go package net: hostLookupOrder(localhost) = files,dns
net.LookupHost addrs: [127.0.0.1 ::1] err: <nil>
What did you expect to see?
Go is able to resolve localhost
when net.DefaultResolver.PreferGo = true
.
What did you see instead?
Go is unable to resolve localhost
. In the debug output go package net: hostLookupOrder(localhost) = cgo
shows that it is not looking at /etc/hosts
.
System details
go version go1.10 darwin/amd64
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/cameron/Library/Caches/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/cameron/src/go"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.10/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.10/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/r3/kh_tqb1j47ldzdbqfrtts6q40000gn/T/go-build873748070=/tmp/go-build -gno-record-gcc-switches -fno-common"
GOROOT/bin/go version: go version go1.10 darwin/amd64
GOROOT/bin/go tool compile -V: compile version go1.10
uname -v: Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64
ProductName: Mac OS X
ProductVersion: 10.13.3
BuildVersion: 17D102
lldb --version: lldb-900.0.64
Swift-4.0