code: func validateListenAddr(ctx context.Context, addr string) (string, string, string, error) {
  	scheme, host, port, err := splitAddr(addr)
  	if err != nil {
  		return "", "", "", errors.Wrap(err, "getting listen address")
  	}
  	rHost, rPort, err := resolveAddr(ctx, host, port)
  	if err != nil {
  		return "", "", "", errors.Wrap(err, "resolving address")
  	}
  	return scheme, rHost, rPort, nil
  }
docs: // validateListenAddr validates and normalizes an address suitable for
  // use with net.Listen(). This accepts an empty "host" part to signify
  // the default (localhost) should be used. Rresolves host names to IP
  // addresses.
  // Returns scheme, host, port as strings.