An application-oriented unified storage layer for Golang.

Programming language: Go
License: Apache License 2.0
Tags: Utility     Filesystem     Files     Object Storage     S3    
Latest version: v2.0.0

go-storage alternatives and similar packages

Based on the "Files" category.
Alternatively, view storage alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of go-storage or a related project?

Add another 'Files' Package



Build Status GoDoc Go Report Card codecov License Codacy Badge Join the chat

An application-oriented unified storage layer for Golang.


  • Production ready
  • High performance
  • Vendor agnostic


Widely services support

Servicer operation support

  • List: list all Storager in service
  • Get: get a Storager via name
  • Create: create a Storager
  • Delete: delete a Storager

Storager operation support

Basic operations

  • Metadata: get storager's metadata
  • Read: read file content
  • Write: write content into file
  • Stat: get file's metadata
  • Delete: delete a file or directory

Extended operations

  • Copy: copy a file inside storager
  • Move: move a file inside storager
  • Reach: generate a public accessible url
  • Statistical: get storage service's statistics

Multiple list style support

  • ListDir: list files and directories under a directory
  • ListPrefix: list files under a prefix

Segment/Multipart support

  • ListPrefixSegment: list segments under a prefix
  • InitIndexSegment: initiate an index type segment
  • WriteIndexSegment: write content into an index type segment
  • CompleteSegment: complete a segment to create a file
  • AbortSegment: abort a segment

File metadata support

Required metadata

  • id: unique key in service
  • name: relative path towards service's work dir
  • size: size of this object
  • updated_at: last update time of this object

Optional metadata

  • content-md5: md5 digest as defined in rfc2616
  • content-type: media type as defined in rfc2616
  • etag: entity tag as defined in rfc2616
  • storage-class: object's storage class as defined in [storage proposal](./docs/design/8-normalize-metadata-storage-class.md)

Quick Start

import (


// Init a service.
store, err := coreutils.OpenStorager("fs", pairs.WithWorkDir("/tmp"))
if err != nil {
    log.Fatalf("service init failed: %v", err)

// Use Storager API to maintain data.
r, err := store.Read("path/to/file")
if err != nil {
    log.Printf("storager read: %v", err)

*Note that all licence references and agreements mentioned in the go-storage README section above are relevant to that project's source code only.