Open geektutu opened 4 years ago
测试代码是不是多了一行 , = s.Raw("CREATE TABLE User(Name text);").Exec() , = s.Raw("CREATE TABLE User(Name text);").Exec()
@wuqinqiang 测试代码是不是多了一行 , = s.Raw("CREATE TABLE User(Name text);").Exec() , = s.Raw("CREATE TABLE User(Name text);").Exec()
故意的啊,可以看到sql执行错误的时候 是红色的。
Session Clear() 方法不考虑并发吗,并发应该会带来问题把
想請教,session struct 中的sql 為什麼要用 strings.Builder,這個設計的理由為何?
@jjmengze 想請教,session struct 中的sql 為什麼要用 strings.Builder,這個設計的理由為何?
浅谈一下自己的理解,session struct 是会在会话中复用的,如果使用 string 类型,string 是只读不可变的,每次修改其实都要重新申请一个内存空间,都是一个新的 string,而 string.Builder 底层使用 []byte 实现。
@jjmengze 想請教,session struct 中的sql 為什麼要用 strings.Builder,這個設計的理由為何?
浅谈一下自己的理解,session struct 是会在会话中复用的,如果使用 string 类型,string 是只读不可变的,每次修改其实都要重新申请一个内存空间,都是一个新的 string,而 string.Builder 底层使用 []byte 实现。
@Gemini-Lin 學習了,謝謝~
func (engine *Engine) Close() close err 后直接 return
geeorm.go 里面貌似少导了github.com/mattn/go-sqlite3
@wanhhe geeorm.go 里面貌似少导了github.com/mattn/go-sqlite3
在main里引用 的,geeorm.go 不依赖具体的驱动
几点疑问和建议:
// QueryRows gets a list of records from db
func (s *Session) QueryRows() (rows *sql.Rows, err error) {
defer s.Clear()
log.Info(s.sql.String(), s.sqlVars)
if rows, err = s.DB().Query(s.sql.String(), s.sqlVars...); err != nil {
log.Error(err)
}
return
}
@FOOLISH06 几点疑问和建议:
- GeeOrm 的不同功能在不同包中,而 Gee 的所有功能都在一个包里面,gorm v1 、 gorm v2 和 xorm 各有取舍,这两种方式哪种更好?
- log 包的取名容易让人误解为 go 官方的包,建议改名为 mylog 、logger 之类的。
- 错误处理:例如下面的代码,错误已经在函数内处理了,为什么还要再返回呢?
// QueryRows gets a list of records from db func (s *Session) QueryRows() (rows *sql.Rows, err error) { defer s.Clear() log.Info(s.sql.String(), s.sqlVars) if rows, err = s.DB().Query(s.sql.String(), s.sqlVars...); err != nil { log.Error(err) } return }
geeorm里面你提到的err只是log了,没有进一步处理,所以作者还是往上抛了。我感觉是geeorm 的error没有处理好
https://geektutu.com/post/geeorm-day1.html
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。介绍了 SQLite 的基础操作(连接数据库,创建表、增删记录等),使用 Go 标准库 database/sql 操作 SQLite 数据库,包括执行(Exec),查询(Query, QueryRow)。