package lookup import ( "errors" "net" "dnsupdater/ip/resolver/ifconfigme" "dnsupdater/ip/resolver/ipecho" "dnsupdater/ip/resolver/ipme" "dnsupdater/ip/resolver/jsonip" ) var services []Service func Provide(service Service) { services = append(services, service) } func Get(name string) Service { for _, service := range services { if service.Name() == name { return service } } return nil } func Lookup() (net.IP, error) { for _, service := range services { ip, err := service.Lookup() if err != nil { continue } return ip, err } return nil, errors.New("failed to get ip") } func init() { Provide(jsonip.New()) Provide(ifconfigme.New()) Provide(ipme.New()) Provide(ipecho.New()) }