in phonenumbers.go [3415:3452]
func getValueForNumber(onceMap map[string]*sync.Once, langMap map[string]*intStringMap, binMap map[string]string, language string, maxLength int, number *PhoneNumber) (string, int, error) {
// do we have data for this language
_, existing := binMap[language]
if !existing {
return "", 0, nil
}
// load it into our map
onceMap[language].Do(func() {
prefixMap, err := loadPrefixMap(binMap[language])
if err == nil {
langMap[language] = prefixMap
}
})
// do we have a map for this language?
prefixMap, ok := langMap[language]
if !ok {
return "", 0, fmt.Errorf("error loading language map for %s", language)
}
e164 := Format(number, E164)
l := len(e164)
if maxLength > l {
maxLength = l
}
for i := maxLength; i > 1; i-- {
index, err := strconv.Atoi(e164[0:i])
if err != nil {
return "", 0, err
}
if value, has := prefixMap.Map[index]; has {
return value, index, nil
}
}
return "", 0, nil
}