func NewClient(addrURIOrCluster interface{}, options ...ClientOption) (*Client, error) {
	var cluster *Cluster
	clientOptions := &ClientOptions{}
	err := clientOptions.addOptions(options...)
	if err != nil {
		return nil, err
	}

	switch u := addrURIOrCluster.(type) {
	case string:
		uri, err := NewURIFromAddress(u)
		if err != nil {
			return nil, err
		}
		return newClientWithURI(uri, clientOptions), nil
	case []string:
		if len(u) == 1 {
			uri, err := NewURIFromAddress(u[0])
			if err != nil {
				return nil, err
			}
			return newClientWithURI(uri, clientOptions), nil
		} else if clientOptions.manualServerAddress {
			return nil, ErrSingleServerAddressRequired
		}
		return newClientFromAddresses(u, clientOptions)
	case *URI:
		uriCopy := *u
		return newClientWithURI(&uriCopy, clientOptions), nil
	case []*URI:
		if len(u) == 1 {
			uriCopy := *u[0]
			return newClientWithURI(&uriCopy, clientOptions), nil
		} else if clientOptions.manualServerAddress {
			return nil, ErrSingleServerAddressRequired
		}
		cluster = NewClusterWithHost(u...)
	case *Cluster:
		cluster = u
	case nil:
		cluster = NewClusterWithHost()
	default:
		return nil, ErrAddrURIClusterExpected
	}

	return newClientWithCluster(cluster, clientOptions), nil
}
func NewClient(addrURIOrCluster interface{}, options ...ClientOption) (*Client, error) {
	var cluster *Cluster
	clientOptions := &ClientOptions{}
	err := clientOptions.addOptions(options...)
	if err != nil {
		return nil, err
	}

	switch u := addrURIOrCluster.(type) {
	case string:
		uri, err := NewURIFromAddress(u)
		if err != nil {
			return nil, err
		}
		return newClientWithURI(uri, clientOptions), nil
	case []string:
		if len(u) == 1 {
			uri, err := NewURIFromAddress(u[0])
			if err != nil {
				return nil, err
			}
			return newClientWithURI(uri, clientOptions), nil
		} else if clientOptions.manualServerAddress {
			return nil, ErrSingleServerAddressRequired
		}
		return newClientFromAddresses(u, clientOptions)
	case *URI:
		uriCopy := *u
		return newClientWithURI(&uriCopy, clientOptions), nil
	case []*URI:
		if len(u) == 1 {
			uriCopy := *u[0]
			return newClientWithURI(&uriCopy, clientOptions), nil
		} else if clientOptions.manualServerAddress {
			return nil, ErrSingleServerAddressRequired
		}
		cluster = NewClusterWithHost(u...)
	case *Cluster:
		cluster = u
	case nil:
		cluster = NewClusterWithHost()
	default:
		return nil, ErrAddrURIClusterExpected
	}

	return newClientWithCluster(cluster, clientOptions), nil
}
func NewClient ( addrURIOrCluster interface { } , options ... ClientOption ) ( * Client , error ) { var cluster * Cluster clientOptions := & ClientOptions { } err := clientOptions . addOptions ( options ... ) if err != nil { return nil , err } switch u := addrURIOrCluster . ( type ) { case string : uri , err := NewURIFromAddress ( u ) if err != nil { return nil , err } return newClientWithURI ( uri , clientOptions ) , nil case [ ] string : if len ( u ) == 1 { uri , err := NewURIFromAddress ( u [ 0 ] ) if err != nil { return nil , err } return newClientWithURI ( uri , clientOptions ) , nil } else if clientOptions . manualServerAddress { return nil , ErrSingleServerAddressRequired } return newClientFromAddresses ( u , clientOptions ) case * URI : uriCopy := * u return newClientWithURI ( & uriCopy , clientOptions ) , nil case [ ] * URI : if len ( u ) == 1 { uriCopy := * u [ 0 ] return newClientWithURI ( & uriCopy , clientOptions ) , nil } else if clientOptions . manualServerAddress { return nil , ErrSingleServerAddressRequired } cluster = NewClusterWithHost ( u ... ) case * Cluster : cluster = u case nil : cluster = NewClusterWithHost ( ) default : return nil , ErrAddrURIClusterExpected } return newClientWithCluster ( cluster , clientOptions ) , nil }
// NewClient creates a client with the given address, URI, or cluster and options.
NewClient creates a client with the given address URI or cluster and options .