"url":"root:root@(192.168.31.103:10836)/test",
"字段help":"time.Now().Format(time.DateTime), time.Now().Unix(), item.msg, item.color, item.auth, item.uid, item.roomid",
"create":"create table danmu (created varchar(20), createdunix varchar(20), msg varchar(100), color varchar(20), auth varchar(50), uid varchar(30), roomid varchar(30))",
- "insert":"insert into danmu (created, createdunix, msg, color, auth, uid, roomid) values (?,?,?,?,?,?,?)"
+ "insert":"insert into danmu (created, createdunix, msg, color, auth, uid, roomid) values ({Date},{Unix},{Msg},{Color},{Auth},{Uid},{Roomid})"
}
}
```
"url":"danmu.sqlite3",
"字段help":"time.Now().Format(time.DateTime), time.Now().Unix(), item.msg, item.color, item.auth, item.uid, item.roomid",
"create":"create table danmu (created text, createdunix text, msg text, color text, auth text, uid text, roomid text)",
- "insert":"insert into danmu values (?,?,?,?,?,?,?)"
+ "insert":"insert into danmu values ({Date},{Unix},{Msg},{Color},{Auth},{Uid},{Roomid})"
}
}
```
db.SetConnMaxLifetime(time.Minute * 3)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)
- if e := psql.BeginTx[any](db, context.Background(), &sql.TxOptions{}).Do(psql.SqlFunc[any]{
- Ty: psql.Execf,
- Query: create,
- SkipSqlErr: true,
- }).Fin(); e != nil {
+ tx := psql.BeginTx[any](db, context.Background())
+ tx.Do(psql.SqlFunc[any]{Query: create, SkipSqlErr: true})
+ if _, e := tx.Fin(); e != nil {
c.Log.Base_add("保存弹幕至db").L(`E: `, e)
} else {
+ c.Log.Base_add("保存弹幕至db").L(`I: `, dbname)
t.db = db
}
}
return
}
if e := t.db.Ping(); e == nil {
- if e := psql.BeginTx[any](t.db, context.Background(), &sql.TxOptions{}).Do(psql.SqlFunc[any]{
- Ty: psql.Execf,
- Query: t.insert,
- Args: []any{time.Now().Format(time.DateTime), time.Now().Unix(), item.msg, item.color, item.auth, item.uid, item.roomid},
- AfterEF: func(_ *any, result sql.Result, txE error) (_ *any, stopErr error) {
- if v, e := result.RowsAffected(); e != nil {
- return nil, e
- } else if v != 1 {
- return nil, errors.New("插入数量错误")
- }
- return nil, nil
- },
- }).Fin(); e != nil {
+ type DanmuI struct {
+ Date string
+ Unix int64
+ Msg string
+ Color string
+ Auth any
+ Uid string
+ Roomid int64
+ }
+
+ tx := psql.BeginTx[any](t.db, context.Background())
+ tx.DoPlaceHolder(psql.SqlFunc[any]{Query: t.insert}, &DanmuI{
+ Date: time.Now().Format(time.DateTime),
+ Unix: time.Now().Unix(),
+ Msg: item.msg,
+ Color: item.color,
+ Auth: item.auth,
+ Uid: item.uid,
+ Roomid: int64(item.roomid),
+ })
+ tx.AfterEF(func(_ *any, result sql.Result, txE error) (_ *any, stopErr error) {
+ if v, e := result.RowsAffected(); e != nil {
+ return nil, e
+ } else if v != 1 {
+ return nil, errors.New("插入数量错误")
+ }
+ return nil, nil
+ })
+ if _, e := tx.Fin(); e != nil {
c.C.Log.Base_add("保存弹幕至db").L(`E: `, e)
}
}
if db, e := sql.Open("sqlite", "danmu.sqlite3"); e != nil {
t.Fatal(e)
} else {
- if e := psql.BeginTx[any](db, context.Background(), &sql.TxOptions{}).Do(psql.SqlFunc[any]{
- Ty: psql.Queryf,
- Query: "select msg as Msg from danmu",
- AfterQF: func(_ *any, rows *sql.Rows, txE error) (_ *any, stopErr error) {
- type row struct {
- Msg string
- }
+ tx := psql.BeginTx[any](db, context.Background())
+ tx.Do(psql.SqlFunc[any]{Query: "select msg as Msg from danmu"})
+ tx.AfterQF(func(_ *any, rows *sql.Rows, txE error) (_ *any, stopErr error) {
+ type row struct {
+ Msg string
+ }
- v, err := psql.DealRows(rows, func() row { return row{} })
- if err != nil {
- return nil, err
- }
- if len(v) != 1 || v[0].Msg != "可能走位配合了他的压枪" {
- return nil, errors.New("no msg")
- }
- return nil, nil
- },
- }).Fin(); e != nil {
+ v, err := psql.DealRows(rows, func() row { return row{} })
+ if err != nil {
+ return nil, err
+ }
+ if len(*v) != 1 || (*v)[0].Msg != "可能走位配合了他的压枪" {
+ return nil, errors.New("no msg")
+ }
+ return nil, nil
+ })
+ if _, e := tx.Fin(); e != nil {
t.Fatal(e)
}
db.Close()
go 1.20
require (
- github.com/gotk3/gotk3 v0.6.1
+ github.com/gotk3/gotk3 v0.6.2
github.com/mdp/qrterminal/v3 v3.0.0
- github.com/qydysky/part v0.25.1
+ github.com/qydysky/part v0.25.2
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
golang.org/x/text v0.9.0
github.com/go-sql-driver/mysql v1.7.1
github.com/gorilla/websocket v1.5.0 // indirect
github.com/klauspost/compress v1.16.5 // indirect
- github.com/miekg/dns v1.1.53 // indirect
+ github.com/miekg/dns v1.1.54 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
github.com/thedevsaddam/gojsonq/v2 v2.5.2 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
golang.org/x/sys v0.7.0 // indirect
golang.org/x/tools v0.8.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- modernc.org/sqlite v1.22.0
+ modernc.org/sqlite v1.22.1
rsc.io/qr v0.2.0 // indirect
)
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gotk3/gotk3 v0.6.1 h1:GJ400a0ecEEWrzjBvzBzH+pB/esEMIGdB9zPSmBdoeo=
github.com/gotk3/gotk3 v0.6.1/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
+github.com/gotk3/gotk3 v0.6.2 h1:sx/PjaKfKULJPTPq8p2kn2ZbcNFxpOJqi4VLzMbEOO8=
+github.com/gotk3/gotk3 v0.6.2/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI=
github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98=
github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
+github.com/mdp/qrterminal v1.0.1 h1:07+fzVDlPuBlXS8tB0ktTAyf+Lp1j2+2zK3fBOL5b7c=
github.com/mdp/qrterminal v1.0.1/go.mod h1:Z33WhxQe9B6CdW37HaVqcRKzP+kByF3q/qLxOGe12xQ=
github.com/mdp/qrterminal/v3 v3.0.0 h1:ywQqLRBXWTktytQNDKFjhAvoGkLVN3J2tAFZ0kMd9xQ=
github.com/mdp/qrterminal/v3 v3.0.0/go.mod h1:NJpfAs7OAm77Dy8EkWrtE4aq+cE6McoLXlBqXQEwvE0=
github.com/miekg/dns v1.1.53 h1:ZBkuHr5dxHtB1caEOlZTLPo7D3L3TWckgUUs/RHfDxw=
github.com/miekg/dns v1.1.53/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
+github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI=
+github.com/miekg/dns v1.1.54/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/qydysky/part v0.25.1 h1:/Y+ywM79DIVhhd6pYSdHVvZRz641eJvnpqL317DheDE=
github.com/qydysky/part v0.25.1/go.mod h1:8Rn6RC+170YRrtgssAumk8/r68+YH3F45J4l6F6+Fl4=
+github.com/qydysky/part v0.25.2 h1:kyLm5pqy9IrQqjEKj3xtyr97lfDtRJSyO+Pbd1sq+eI=
+github.com/qydysky/part v0.25.2/go.mod h1:IEMpGB0NBl6MklZmoenSpS5ChhaIL79JYFo6mF1UkAU=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
modernc.org/sqlite v1.22.0 h1:Uo+wEWePCspy4SAu0w2VbzUHEftOs7yoaWX/cYjsq84=
modernc.org/sqlite v1.22.0/go.mod h1:cxbLkB5WS32DnQqeH4h4o1B0eMr8W/y8/RGuxQ3JsC0=
+modernc.org/sqlite v1.22.1 h1:P2+Dhp5FR1RlVRkQ3dDfCiv3Ok8XPxqpe70IjYVA9oE=
+modernc.org/sqlite v1.22.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk=
modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY=
modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
modernc.org/tcl v1.15.1 h1:mOQwiEK4p7HruMZcwKTZPw/aqtGM4aY00uzWhlKKYws=