| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | package netimport (	"net"	"sync/atomic"	"unsafe")// IPResolver is the interface to resolve host name to IPs.type IPResolver interface {	LookupIP(host string) ([]net.IP, error)}type systemIPResolver intfunc (s systemIPResolver) LookupIP(host string) ([]net.IP, error) {	return net.LookupIP(host)}const (	systemIPResolverInstance = systemIPResolver(0))// SystemIPResolver returns an IPResolver that resolves IP through underlying system.func SystemIPResolver() IPResolver {	return systemIPResolverInstance}var (	ipResolver unsafe.Pointer)func LookupIP(host string) ([]net.IP, error) {	r := (*IPResolver)(atomic.LoadPointer(&ipResolver))	return (*r).LookupIP(host)}func RegisterIPResolver(resolver IPResolver) {	atomic.StorePointer(&ipResolver, unsafe.Pointer(&resolver))}func init() {	RegisterIPResolver(systemIPResolverInstance)}
 |