It looks like the Go runtime implements its own DNS client on *unix platforms including OSX.
> On Feb 22, 2021, at 11:40 PM, Peng Yu <pengyu...@gmail.com> wrote: > > I don’t understand why ping does not have the same problem. Ping is not based > on C library? > > On Mon, Feb 22, 2021 at 11:20 PM Ian Lance Taylor <i...@golang.org > <mailto:i...@golang.org>> wrote: > On Mon, Feb 22, 2021 at 9:11 PM Peng Yu <pengyu...@gmail.com > <mailto:pengyu...@gmail.com>> wrote: > > > > I tried 1.16. > > > > $ go version > > go version go1.16 darwin/amd64 > > > > The problem still exists. When I change mymachine.local to > > mymachine_local, the problem is gone. So somehow, this is related to > > host resolution? It might try to DNS lookup the hostname, when it can > > not find it via DNS then it look up in /etc/hosts? > > On Darwin I believe that by default we pass DNS lookups to the C > library. So I think that what you are seeing is the behavior of the C > library. Try setting the environment variable GODEBUG=netdns=go. > > Ian > > > > On 2/22/21, Ian Lance Taylor <i...@golang.org <mailto:i...@golang.org>> > > wrote: > > > On Mon, Feb 22, 2021 at 12:22 PM Peng Yu <pengyu...@gmail.com > > > <mailto:pengyu...@gmail.com>> wrote: > > >> > > >> I run the following go program using net.Dial(). Depending on whether > > >> I specify a local hostname (defined in /etc/hosts) or an IP. I get > > >> very different runtimes. > > >> > > >> But `ping mymachine.local` resolves the hostname to an IP address > > >> instantaneously. So the two calls of the go program should have the > > >> same runtimes. > > >> > > >> Can anybody reproduce the same runtime problem? Does anybody know what > > >> is wrong with the implementation of net.Dial()? Thanks. > > >> > > >> $ ./main mymachine.local:22 > > >> 2021/02/22 14:14:25 before > > >> 2021/02/22 14:14:30 after > > >> $ ./main 192.168.1.104:22 <http://192.168.1.104:22/> > > >> 2021/02/22 14:14:30 before > > >> 2021/02/22 14:14:30 after > > >> $ cat main.go > > >> package main > > >> import ( > > >> "net" > > >> "log" > > >> "os" > > >> ) > > >> > > >> func main() { > > >> dialAddr := os.Args[1] > > >> log.Println("before") > > >> _, err := net.Dial("tcp", dialAddr) > > >> log.Println("after") > > >> if err != nil { > > >> log.Fatalln(err) > > >> } > > >> } > > > > > > Which version of Go are you using? What operating system are you running > > > on? > > > > > > It is possible that are running into https://golang.org/issue/35305 > > > <https://golang.org/issue/35305>, > > > which is fixed in 1.16. > > > > > > Ian > > > > > > > > > -- > > Regards, > > Peng > -- > Regards, > Peng > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CABrM6w%3D8Orgj3t4MW3%3DMs7L0vy0nFS_EeGjRZ8n%2BTvQOrHAO9g%40mail.gmail.com > > <https://groups.google.com/d/msgid/golang-nuts/CABrM6w%3D8Orgj3t4MW3%3DMs7L0vy0nFS_EeGjRZ8n%2BTvQOrHAO9g%40mail.gmail.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/2E9EE048-6CDF-4B35-85E2-7BFD5F76C500%40ix.netcom.com.