code: func (b *Builder) expandFirstIP(name string, s *string) *net.IPAddr {
  	if s == nil || *s == "" {
  		return nil
  	}
  
  	addr := b.expandFirstAddr(name, s)
  	if addr == nil {
  		return nil
  	}
  	switch a := addr.(type) {
  	case *net.IPAddr:
  		return a
  	case *net.UnixAddr:
  		b.err = multierror.Append(b.err, fmt.Errorf("%s cannot be a unix socket", name))
  		return nil
  	default:
  		b.err = multierror.Append(b.err, fmt.Errorf("%s has invalid address type %T", name, a))
  		return nil
  	}
  }
docs: // expandFirstIP expands the go-sockaddr template in s and returns the
  // first address if it is not a unix socket address. If the template
  // expands to multiple addresses an error is set and nil is returned.