Skip to content

Latest commit

 

History

History
30 lines (24 loc) · 1.17 KB

README.md

File metadata and controls

30 lines (24 loc) · 1.17 KB

sqljson

Wraps a Go type for automatic marshalling and unmarshalling with SQL, so you don't have to implement Scan() and Value().

You have a struct that is marshalled/unmarshalled to JSON data, and you want to store it in a SQL database, and have the struct type automatically marshal/unmarshal when you save/load it, without having to marshal to JSON manually. With generics in Go 1.18, this is now possible! 🥳

Usage

// You have a struct that you marshal/unmarshal from JSON and you want to automatically unmarshal.
type UserData struct {
	Name string `json:"name"`
}

// Your SQL model, in this example used with GORM.
type Model struct {
	ID       uint                    `gorm:"primarykey"`
	UserData sqljson.JSON[UserData] // Use the JSON type with UserData, your data struct, as a type parameter.
}


func main() {
  db, _ := gorm.Open(sqlite.Open("file::memory:"), &gorm.Config{})
  user := UserData{Name: "Beautiful Name"}
  // INSERT INTO `models` (`user_data`) VALUES ("{\"name\":\"user\"}") RETURNING `id`
  db.Save(&Model{UserData: sqljson.From(user)})
  
  modelFromDb := Model{}
  db.First(&modelFromDb)
  println(modelFromDb.UserData.Item.Name) // "Beautiful Name"
}