golang/go

os: Consider providing a VFS layer

ianlancetaylor opened this issue · 12 comments

We have various different VFS layers in different programs, such as
cmd/godoc/filesystem.go.  Can we have the os package provide a VFS layer?  Or can we
provide a vfs package that wraps the os package?  Or something else to provide a simple
unified approach?

Comment 1:

Labels changed: added go1.2maybe.

Comment 2 by tv@duh.org:

Well, it's very much a skeleton at the moment, but I've started brainstorm-implementing
a vfs type layer here:
https://github.com/tvierling/go-vfs
The basic planned structure is for two types of accessibility: an iterable-only,
sequential-access interface (à la most archives), and a random-path-access filesystem
that implements and extends the above with a full complement of operations (applicable
to real filesystems, as well as virtual accessors that support path-type operations...
say, URIs or anything else that can be structured as a path tree).
Not too sure where I'm going with it yet, but I'm open to ideas thrown in as issues on
the github repo.
adg commented

Comment 3:

For interest's sake, the godoc VFS stuff has been put into a separate package:
 https://code.google.com/p/go/source/browse/?repo=tools#hg%2Fgodoc%2Fvfs
rsc commented

Comment 4:

Since no proposal has been forthcoming, I suspect this is going to have to wait another
round.

Labels changed: added go1.3maybe, removed go1.2maybe.

Comment 5:

Labels changed: removed go1.3maybe.

rsc commented

Comment 6:

Labels changed: added go1.3maybe.

rsc commented

Comment 7:

Labels changed: added release-none, removed go1.3maybe.

rsc commented

Comment 8:

Labels changed: added repo-main.

Comment 9:

This is tricky. We could never find a good design that worked with (replaced) all the
existing VFSes.

Owner changed to ---.

Status changed to Thinking.

Comment 10:

Issue #8931 has been merged into this issue.

rsc commented

@robpike and I worked out a design for a general file system interface for Go. I've posted a draft design doc, video, and code (links below). Instead of comments on this issue, please use the Reddit Q&A for comments on this specific draft design - Reddit threads and scales discussions better than GitHub does. Thanks!

Video: https://golang.org/s/draft-iofs-video
Design: https://golang.org/s/draft-iofs-design
Q&A: https://golang.org/s/draft-iofs-reddit
Code: https://golang.org/s/draft-iofs-code

rsc commented

I've filed #41190 to propose accepting the draft design mentioned in my previous comment.
I am going to close this issue as superseded by that one.