golang编写一个类似sqlite的文件数据库实现增删改查动态改变表结构代码
代码语言:golang
所属分类:其他
代码描述:golang编写一个类似sqlite的文件数据库实现增删改查动态改变表结构代码,实现createtable、insert、update、select、delete,id自增、动态改变表结构等数据库特性,仅供学习。
代码标签: golang 编写 类似 sqlite 文件 数据库 增删 改查 代码 动态 改变 表 结构
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
package main //需要在go1.16以上版本运行 import ( "fmt" "os" "encoding/gob" "sync" "reflect" "bytes" ) type Database struct { filename string tables map[string]*Table mutex sync.RWMutex } type Table struct { Name string Schema map[string]string // 使用字符串来表示类型 Rows []map[string]interface{} NextID int } type SerializableDatabase struct { Tables map[string]*Table } func (db *Database) MarshalBinary() ([]byte, error) { sdb := SerializableDatabase{ Tables: db.tables, } var buf bytes.Buffer enc := gob.NewEncoder(&buf) err := enc.Encode(sdb) return buf.Bytes(), err } func (db *Database) UnmarshalBinary(data []byte) error { var sdb SerializableDatabase buf := bytes.NewBuffer(data) dec := gob.NewDecoder(buf) err := dec.Decode(&sdb) if err != nil { return err } db.tables = sdb.Tables return nil } func NewDatabase(filename string) *Database { db := &Database{ filename: filename, tables: make(map[string]*Table), } err := db.Load() if err != nil && !os.IsNotExist(err) { fmt.Printf("警告: 加载数据库失败: %v\n", err) } return db } func (db *Database) CreateTable(name string, schema map[string]reflect.Type) error { db.mutex.Lock() defer db.mutex.Unlock() if _, exists := db.tables[name]; exists { return f.........完整代码请登录后点击上方下载按钮下载查看
网友评论0