code: func (ac *accountCache) find(a accounts.Account) (accounts.Account, error) {
  	// Limit search to address candidates if possible.
  	matches := ac.all
  	if (a.Address != common.Address{}) {
  		matches = ac.byAddr[a.Address]
  	}
  	if a.URL.Path != "" {
  		// If only the basename is specified, complete the path.
  		if !strings.ContainsRune(a.URL.Path, filepath.Separator) {
  			a.URL.Path = filepath.Join(ac.keydir, a.URL.Path)
  		}
  		for i := range matches {
  			if matches[i].URL == a.URL {
  				return matches[i], nil
  			}
  		}
  		if (a.Address == common.Address{}) {
  			return accounts.Account{}, ErrNoMatch
  		}
  	}
  	switch len(matches) {
  	case 1:
  		return matches[0], nil
  	case 0:
  		return accounts.Account{}, ErrNoMatch
  	default:
  		err := &AmbiguousAddrError{Addr: a.Address, Matches: make([]accounts.Account, len(matches))}
  		copy(err.Matches, matches)
  		sort.Sort(accountsByURL(err.Matches))
  		return accounts.Account{}, err
  	}
  }
docs: // find returns the cached account for address if there is a unique match.
  // The exact matching rules are explained by the documentation of accounts.Account.
  // Callers must hold ac.mu.