工作
新的挑战
本周开了一个新的项目 databend-go-driver,是一套类似于 gosnowflake 的数据库 SDK,主要是基于 Go 的 database/sql package,实现相应的 interface 并注册 databend 到 database/sql,可以使用下面的代码像操作 mysql 一样操作 databend :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| func main() { dsn, cfg, err := getDSN() if err != nil { log.Fatalf("failed to create DSN from Config: %v, err: %v", cfg, err) }
db, err := sql.Open("databend", dsn) if err != nil { log.Fatalf("failed to connect. %v, err: %v", dsn, err) } defer db.Close() query := "SELECT 1" rows, err := db.Exec(query) // no cancel is allowed if err != nil { log.Fatalf("failed to run a query. %v, err: %v", query, err) } fmt.Println(rows.RowsAffected()) fmt.Printf("Congrats! You have successfully run %v with databend DB!\n", query) }
|
目前项目的架子搭了一下,已经完成基本的注册和简单的 exec 功能,但距离真正生产可用比较遥远。。。还要实现 query, rows, async rows 等功能,完成这些工作就需要对 databend 的工作原理、结构有一定了解,可能是一个小挑战QUQ。
开源
最近由于项目需要又用了一下 fuckdb,这是一个能够一键将 mysql schema 转成带各种 tag 的 golang struct 的大大提高开发效率的工具,感兴趣的可以研究一下这里不多作介绍了。主要是在打开 github 项目页面的时候发现一个陈年老 issue,竟然是去年 7 月份用户提出来的,回想起去年 7 月,确实是忙得焦头烂额(懂的都懂),但没想到这个问题一搁置就是一年。
这个需求是将 struct 的 json tag 从 snake case 转成 camel case,改动之前生成的代码是这样的:
1 2 3 4 5 6 7
| type structName struct { Age string `gorm:"column:slug" json:"age"` Name string `gorm:"column:name" json:"name"` CreatorID int64 `gorm:"column:creator_id" json:"creator_id"` CreatedAt time.Time `gorm:"column:created_at" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at" json:"updated_at"` }
|
snake case 本身也不符合 golang 的代码风格,所以就鲁了一个 PR 解决了这个问题,输出的 struct 就是:
1 2 3 4 5 6 7
| type structName struct { Age string `gorm:"column:slug" json:"age"` Name string `gorm:"column:name" json:"name"` CreatorID int64 `gorm:"column:creator_id" json:"creatorId"` CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` }
|
嗯,优雅了 =.=。
其他
记录一些随手拍:
-------------The End-------------
subscribe to my blog by scanning my public wechat account
0%
文章来源: https://cloudsjhan.github.io/2022/09/02/2022-36-Open-source-weekly-report/
如有侵权请联系:admin#unsafe.sh