2013-05-24 34 views
12

Tôi muốn có thể ghi lại mọi ghi/đọc mà các vấn đề về ứng dụng đi của tôi đến hệ điều hành cơ bản, và cũng có thể (nếu có thể) thay thế hoàn toàn FS bằng một bộ nhớ chỉ nằm trong bộ nhớ.Làm thế nào để hệ thống tập tin giả/trừu tượng đi?

Có thể không? Làm sao? Có thể có giải pháp sẵn sàng để đi?

Trả lời

21

Đây là trực tiếp từ Andrew Gerrand của 10 things you (probably) don't know about Go:

var fs fileSystem = osFS{} 

type fileSystem interface { 
    Open(name string) (file, error) 
    Stat(name string) (os.FileInfo, error) 
} 

type file interface { 
    io.Closer 
    io.Reader 
    io.ReaderAt 
    io.Seeker 
    Stat() (os.FileInfo, error) 
} 

// osFS implements fileSystem using the local disk. 
type osFS struct{} 

func (osFS) Open(name string) (file, error)  { return os.Open(name) } 
func (osFS) Stat(name string) (os.FileInfo, error) { return os.Stat(name) } 

Để làm việc này, bạn sẽ cần phải viết mã của bạn để có một cuộc tranh luận fileSystem (có thể nhúng nó trong một số loại khác, hoặc để nil biểu thị hệ thống tệp mặc định).

+2

Điều đó có vẻ đầy hứa hẹn, nhưng còn những cuộc gọi trực tiếp đến 'os.Open' thì sao? là việc gán biến 'fs' sẽ" âm thầm "ảnh hưởng đến chúng? – canni

+1

@canni: không, nó sẽ không ảnh hưởng đến các cuộc gọi trực tiếp. Nếu đó là những gì bạn muốn, tôi nghĩ rằng bạn sẽ phải chơi thủ đoạn trên mối liên kết, và tôi chưa bao giờ thử điều đó bản thân mình. –

+5

Tôi rất thích xem ví dụ về mã hoạt động. – Paradiesstaub

0

Chỉ vì câu hỏi này bật lên khá cao khi googling cho vấn đề này:

Tôi không biết về khai thác gỗ đọc và viết, nhưng đối với một hệ thống tập tin thường trú chỉ trong bộ nhớ, tôi đã tìm thấy blang/vfs. Tôi đã không được sử dụng trong sản xuất, và nó nói đó là alpha và giao diện có khả năng thay đổi. Sử dụng nó có nguy cơ của riêng bạn.

Tôi cho rằng bạn có thể triển khai nó để ghi nhật ký lần đọc và ghi.

6

Đối với những người tìm cách giải quyết vấn đề nhạo báng hệ thống tệp của bạn trong khi thử nghiệm, thư viện Afero checkout @ spf13, https://github.com/spf13/afero. Nó làm mọi thứ mà câu trả lời chấp nhận, nhưng với tài liệu và ví dụ tốt hơn.

Các vấn đề liên quan