Недавно я читаю исходный код net
пакета Go.Когда я углублялся в часть разрешения имен, казалось, что Go дважды запрашивал /etc/hosts
:
Сначала в net/dnsclient_unix.go
goLookupHostOrder :
func (r *Resolver) goLookupHostOrder(ctx context.Context, name string, order hostLookupOrder) (addrs []string, err error) {
if order == hostLookupFilesDNS || order == hostLookupFiles {
// Use entries from /etc/hosts if they match.
addrs = lookupStaticHost(name)
if len(addrs) > 0 || order == hostLookupFiles {
return
}
}
ips, _, err := r.goLookupIPCNAMEOrder(ctx, name, order)
Затемв goLookupIPCNAMEOrder :
func (r *Resolver) goLookupIPCNAMEOrder(ctx context.Context, name string, order hostLookupOrder) (addrs []IPAddr, cname dnsmessage.Name, err error) {
if order == hostLookupFilesDNS || order == hostLookupFiles {
// goLookupIPFiles invokes lookupStaticHost internally.
addrs = goLookupIPFiles(name)
if len(addrs) > 0 || order == hostLookupFiles {
return addrs, dnsmessage.Name{}, nil
}
}
Так это ошибка?Или у него есть какая-то причина, но не задокументированная?