// Пример использования KeyOrder в опциях коллекции — встроенная сортировка ключей при сериализации. package main import ( "fmt" "log" "os" "time" "direct-dev.ru/gitea/GiteaAdmin/elowdb-go/pkg/linedb" ) // Item — структура для вставки (LineDB поддерживает struct и map) type Item struct { Name string `json:"name"` Value int `json:"value"` Active bool `json:"active"` Atime string `json:"atime"` } func main() { os.RemoveAll("./data") // KeyOrder в опциях коллекции — при задании используется кастомная сериализация с порядком ключей initOptions := &linedb.LineDbInitOptions{ CacheSize: 100, CacheTTL: time.Minute, DBFolder: "./data", Collections: []linedb.JSONLFileOptions{ { CollectionName: "items", AllocSize: 256, KeyOrder: []linedb.KeyOrder{ {Key: "id", Order: 0}, {Key: "atime", Order: -1}, }, }, }, } db := linedb.NewLineDb(nil) if err := db.Init(false, initOptions); err != nil { log.Fatalf("Init failed: %v", err) } defer db.Close() opts := linedb.LineDbAdapterOptions{} // Инсерты: map и структуры (LineDB принимает оба) items := []any{ map[string]any{"Value": 42, "Name": "Test", "Active": true, "atime": "2024-01-01"}, map[string]any{"Active": false, "Name": "Alice", "Value": 100, "atime": "2024-01-02"}, map[string]any{"Name": "Bob", "Value": 0, "Active": true, "atime": "2024-01-03"}, Item{Name: "Charlie", Value: 7, Active: true, Atime: "2024-01-04"}, Item{Name: "Diana", Value: 99, Active: false, Atime: "2024-01-05"}, } if err := db.Insert(items, "items", opts); err != nil { log.Fatalf("Insert failed: %v", err) } // Read all, err := db.Read("items", opts) if err != nil { log.Fatalf("Read failed: %v", err) } fmt.Printf("Records: %d\n", len(all)) for _, r := range all { fmt.Printf(" %+v\n", r) } raw, _ := os.ReadFile("./data/items.jsonl") fmt.Printf("\nRaw file:\n%s\n", string(raw)) }