func New(u *url.URL) (fs.FS, error) {
	switch u.Scheme {
	case s3blob.Scheme, gcsblob.Scheme, azureblob.Scheme:
	default:
		return nil, fmt.Errorf("invalid URL scheme %q", u.Scheme)
	}
	root := strings.TrimPrefix(u.Path, "/")
	return &blobFS{
		ctx:     context.Background(),
		base:    u,
		hclient: http.DefaultClient,
		root:    root,
		envfs:   os.DirFS("/"),
	}, nil
}
New provides a filesystem (an fs.FS) backed by an blob storage bucket,
rooted at the given URL.

A context can be given by using WithContextFS.
package blobfs
import (
	"context"
	"errors"
	"fmt"
	"io"
	"io/fs"
	"net/http"
	"net/url"
	"os"
	"path"
	"strings"
	"time"
	"github.com/Azure/azure-storage-blob-go/azblob"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/hairyhenderson/go-fsimpl"
	"github.com/hairyhenderson/go-fsimpl/internal"
	"github.com/hairyhenderson/go-fsimpl/internal/env"
	"gocloud.dev/blob"
	"gocloud.dev/blob/azureblob"
	"gocloud.dev/blob/gcsblob"
	"gocloud.dev/blob/s3blob"
	"gocloud.dev/gcerrors"
	"gocloud.dev/gcp"
)
type blobFS struct {
	ctx     context.Context
	base    *url.URL
	hclient *http.Client
	bucket  *blob.Bucket
	envfs   fs.FS
	root    string
}
var fakeModTime *time.Time