Hi folks,

I'm considering (in draft PR https://github.com/benhoyt/goawk/pull/296) 
adding the option to GoAWK to allow customizing the file read/write 
operations that it performs when reading files, creating new files with 
AWK's ">" operator, or appending to them with AWK's ">>" operator.

I'd like it to be shaped like io/fs.FS. However, that only supports 
read-only files (Open returns an fs.File). So my thought is to have an 
interface extension like so:

type WriteFS interface {
fs.FS
Create(name string) (io.WriteCloser, error)
Append(name string) (io.WriteCloser, error)
}

Which are all the operations GoAWK needs.

Then if you pass a regular fs.FS (via Config.FileSystem) it'll only allow 
reads, but if you psas something that implements WriteFS as defined above, 
it'll support read and write.

I notice that some other libraries define WriteFS as:

type WriteFS interface {
    fs.FS
    OpenFile(name string, flag int, perm os.FileMode) (io.WriteCloser, 
error)
}

That fits nicely with os.OpenFile, but it pulls in a whole lot of 
POSIX-specific stuff and generality with the "flag" and "perm" arguments, 
when I only need Create and Append very specifically.

Does what I've proposed seem reasonable? Any better ideas for handling this?

-Ben

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/2dc5adc6-1941-443e-87d4-60d9dc60e084n%40googlegroups.com.

Reply via email to