go-store alternatives and similar packages
Based on the "ORM" category.
Alternatively, view go-store alternatives based on common mentions on social networks and blogs.
-
upper.io/db
Data Access Layer (DAL) for PostgreSQL, CockroachDB, MySQL, SQLite and MongoDB with ORM-like features. -
xorm
xorm是一个简单而强大的Go语言ORM库,通过它可以使数据库操作非常简便。本库是基于原版xorm的定制增强版本,为xorm提供类似ibatis的配置文件及动态SQL支持,支持AcitveRecord操作 -
go-queryset
100% type-safe ORM for Go (Golang) with code generation and MySQL, PostgreSQL, Sqlite3, SQL Server support. GORM under the hood. -
golobby/orm
A lightweight yet powerful, fast, customizable, type-safe object-relational mapper for the Go programming language. -
lore
Light Object-Relational Environment (LORE) provides a simple and lightweight pseudo-ORM/pseudo-struct-mapping environment for Go
SaaSHub - Software Alternatives and Reviews
Do you think we are missing an alternative of go-store or a related project?
Popular Comparisons
README
store
store is a data-store library for Go that provides a set of platform-independent interfaces to persist and retrieve data.
Its primary goal is to wrap existing implementations of such primitives, such as those in package redis, into shared public interfaces that abstract functionality, plus some other related primitives.
It currently supports Redis from the [redis](redis/) package.
NOTE: This library is currently under active development and not ready for production use.
Example
The below example stores, lists and fetches the saved records
package main
import (
"fmt"
"github.com/gosuri/go-store/redis"
)
type hacker struct {
Id string
Name string
Birthyear int
}
func (h *hacker) Key() string {
return h.Id
}
func (h *hacker) SetKey(k string) {
h.Id = k
}
func main() {
store, err := redis.NewStore("", "")
if err != nil {
panic(err) // handle error
}
// Save a hacker in the store with a auto-generated uuid
if err := store.Write(&hacker{Name: "Alan Turing", Birthyear: 1912}); err != nil {
panic(err) // handle error
}
var hackers []hacker
// Populate hackers slice with ids of all hackers in the store
store.List(&hackers)
alan := hackers[0]
store.Read(&alan)
fmt.Println("Hello,", alan.Name)
fmt.Println("Listing all", len(hackers), "hackers")
// Fetches all hackers with names from the store
store.ReadMultiple(hackers)
for _, h := range hackers {
fmt.Printf("%s (%d) (%s)\n", h.Name, h.Birthyear, h.Id)
}
}
Roadmap
Below are items I am and plan on working on in the near future. Contributions are welcome.
Feature | Status |
---|---|
Save multiple records in a single call using pipelining | implementing |
Query (using finders) and indexing |
Contributing
Dependency management
Users who import store
into their package main are responsible to organize and maintain all of their dependencies to ensure code compatibility and build reproducibility.
Store makes no direct use of dependency management tools like Godep.
We will use a variety of continuous integration providers to find and fix compatibility problems as soon as they occur.
Running Testing
$ make test
Benchmarks
$ make benchmark
...
BenchmarkRedisWrite 10000 104302 ns/op
BenchmarkRead 20000 65870 ns/op
BenchmarkRead1k 20 67325041 ns/op
BenchmarkRedisList1k 50 27598338 ns/op
BenchmarkRedisList10k 30 71845057 ns/op
BenchmarkReadMultiple1k 200 7453783 ns/op