Date: Fri, 29 Mar 2024 16:46:46 +0800 (CST) Message-ID: <1853992958.781.1711702006378@localhost.localdomain> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_780_347661196.1711702006377" ------=_Part_780_347661196.1711702006377 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
Model
=E5=AF=B9=E8=B1=A1=E4=B9=9F=E5=8F=AF=E4=BB=A5=E9=80=9A=
=E8=BF=87TX
=E4=BA=8B=E5=8A=A1=E6=8E=A5=E5=8F=A3=E5=88=9B=E5=BB=
=BA=EF=BC=8C=E9=80=9A=E8=BF=87=E4=BA=8B=E5=8A=A1=E5=AF=B9=E8=B1=A1=E5=88=9B=
=E5=BB=BA=E7=9A=84Model
=E5=AF=B9=E8=B1=A1=E4=B8=8E=E9=80=9A=E8=
=BF=87DB
=E6=95=B0=E6=8D=AE=E5=BA=93=E5=AF=B9=E8=B1=A1=E5=88=9B=
=E5=BB=BA=E7=9A=84Model
=E5=AF=B9=E8=B1=A1=E5=8A=9F=E8=83=BD=E6=
=98=AF=E4=B8=80=E6=A0=B7=E7=9A=84=EF=BC=8C=E5=8F=AA=E4=B8=8D=E8=BF=87=E5=89=
=8D=E8=80=85=E7=9A=84=E6=89=80=E6=9C=89=E6=93=8D=E4=BD=9C=E9=83=BD=E6=98=AF=
=E5=9F=BA=E4=BA=8E=E4=BA=8B=E5=8A=A1=EF=BC=8C=E8=80=8C=E5=BD=93=E4=BA=8B=E5=
=8A=A1=E6=8F=90=E4=BA=A4=E6=88=96=E8=80=85=E5=9B=9E=E6=BB=9A=E5=90=8E=EF=BC=
=8C=E5=AF=B9=E5=BA=94=E7=9A=84Model
=E5=AF=B9=E8=B1=A1=E4=B8=8D=
=E8=83=BD=E8=A2=AB=E7=BB=A7=E7=BB=AD=E4=BD=BF=E7=94=A8=EF=BC=8C=E5=90=A6=E5=
=88=99=E4=BC=9A=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF=E3=80=82=E5=9B=A0=E4=B8=
=BA=E8=AF=A5TX
=E6=8E=A5=E5=8F=A3=E4=B8=8D=E8=83=BD=E8=A2=AB=E7=
=BB=A7=E7=BB=AD=E4=BD=BF=E7=94=A8=EF=BC=8C=E4=B8=80=E4=B8=AA=E4=BA=8B=E5=8A=
=A1=E5=AF=B9=E8=B1=A1=E4=BB=85=E5=AF=B9=E5=BA=94=E4=BA=8E=E4=B8=80=E4=B8=AA=
=E4=BA=8B=E5=8A=A1=E6=B5=81=E7=A8=8B=EF=BC=8CCommit
/Roll=
back
=E5=90=8E=E5=8D=B3=E7=BB=93=E6=9D=9F=E3=80=82
=E6=9C=AC=E7=AB=A0=E8=8A=82=E4=BB=85=E5=AF=B9=E9=93=BE=E5=BC=8F=E6=93=8D= =E4=BD=9C=E6=B6=89=E5=8F=8A=E5=88=B0=E7=9A=84=E4=BA=8B=E5=8A=A1=E5=A4=84=E7= =90=86=E6=96=B9=E6=B3=95=E5=81=9A=E7=AE=80=E5=8D=95=E4=BB=8B=E7=BB=8D=EF=BC= =8C=E6=9B=B4=E8=AF=A6=E7=BB=86=E7=9A=84=E4=BB=8B=E7=BB=8D=E8=AF=B7=E5=8F=82= =E8=80=83 ORM=E4=BA=8B= =E5=8A=A1=E5=A4=84=E7=90=86 =E7=AB=A0=E8=8A=82=E3=80=82
Transaction
=E4=B8=BA=E6=96=B9=E4=BE=BF=E4=BA=8B=E5=8A=A1=E6=93=8D=E4=BD=9C=EF=BC=8C=
gdb
=E6=8F=90=E4=BE=9B=E4=BA=86=E4=BA=8B=E5=8A=A1=E7=9A=84=E9=
=97=AD=E5=8C=85=E6=93=8D=E4=BD=9C=EF=BC=8C=E9=80=9A=E8=BF=87Transacti=
on
=E6=96=B9=E6=B3=95=E5=AE=9E=E7=8E=B0=EF=BC=8C=E8=AF=A5=E6=96=B9=E6=
=B3=95=E5=AE=9A=E4=B9=89=E5=A6=82=E4=B8=8B=EF=BC=9A
func (db DB) Transaction(ctx con= text.Context, f func(ctx context.Context, tx TX) error) (err error)
=E5=BD=93=E7=BB=99=E5=AE=9A=E7=9A=84=E9=97=AD=E5=8C=85=E6=96=B9=E6=B3=95=
=E8=BF=94=E5=9B=9E=E7=9A=84error
=E4=B8=BAnil
=E6=
=97=B6=EF=BC=8C=E9=82=A3=E4=B9=88=E9=97=AD=E5=8C=85=E6=89=A7=E8=A1=8C=E7=BB=
=93=E6=9D=9F=E5=90=8E=E5=BD=93=E5=89=8D=E4=BA=8B=E5=8A=A1=E8=87=AA=E5=8A=A8=
=E6=89=A7=E8=A1=8CCommit
=E6=8F=90=E4=BA=A4=E6=93=8D=E4=BD=9C=
=EF=BC=9B=E5=90=A6=E5=88=99=E8=87=AA=E5=8A=A8=E6=89=A7=E8=A1=8CRollba=
ck
=E5=9B=9E=E6=BB=9A=E6=93=8D=E4=BD=9C=E3=80=82
=E5=A6=82=E6=9E=9C=E9=97=AD=E5=8C=85=E5=86=85=E9=83=A8=E6=93=8D=E4=BD=9C=
=E4=BA=A7=E7=94=9Fpanic
=E4=B8=AD=E6=96=AD=EF=BC=8C=E8=AF=A5=E4=
=BA=8B=E5=8A=A1=E4=B9=9F=E5=B0=86=E8=BF=9B=E8=A1=8C=E5=9B=9E=E6=BB=9A=E3=80=
=82
func Register() error { =09return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) erro= r { =09=09var ( =09=09=09result sql.Result =09=09=09err error =09=09) =09=09// =E5=86=99=E5=85=A5=E7=94=A8=E6=88=B7=E5=9F=BA=E7=A1=80=E6=95=B0=E6= =8D=AE =09=09result, err =3D tx.Table("user").Insert(g.Map{ =09=09=09"name": "john", =09=09=09"score": 100, =09=09=09//... =09=09}) =09=09if err !=3D nil { =09=09=09return err =09=09} =09=09// =E5=86=99=E5=85=A5=E7=94=A8=E6=88=B7=E8=AF=A6=E6=83=85=E6=95=B0=E6= =8D=AE=EF=BC=8C=E9=9C=80=E8=A6=81=E7=94=A8=E5=88=B0=E4=B8=8A=E4=B8=80=E6=AC= =A1=E5=86=99=E5=85=A5=E5=BE=97=E5=88=B0=E7=9A=84=E7=94=A8=E6=88=B7uid =09=09result, err =3D tx.Table("user_detail").Insert(g.Map{ =09=09=09"uid": result.LastInsertId(), =09=09=09"phone": "18010576258", =09=09=09//... =09=09}) =09=09return err =09}) }
=E6=88=91=E4=BB=AC=E4=B9=9F=E5=8F=AF=E4=BB=A5=E5=9C=A8=E9=93=BE=E5=BC=8F=
=E6=93=8D=E4=BD=9C=E4=B8=AD=E9=80=9A=E8=BF=87TX
=E6=96=B9=E6=B3=
=95=E5=88=87=E6=8D=A2=E7=BB=91=E5=AE=9A=E7=9A=84=E4=BA=8B=E5=8A=A1=E5=AF=B9=
=E8=B1=A1=E3=80=82=E5=A4=9A=E6=AC=A1=E9=93=BE=E5=BC=8F=E6=93=8D=E4=BD=9C=E5=
=8F=AF=E4=BB=A5=E7=BB=91=E5=AE=9A=E5=90=8C=E4=B8=80=E4=B8=AA=E4=BA=8B=E5=8A=
=A1=E5=AF=B9=E8=B1=A1=EF=BC=8C=E5=9C=A8=E8=AF=A5=E4=BA=8B=E5=8A=A1=E5=AF=B9=
=E8=B1=A1=E4=B8=AD=E6=89=A7=E8=A1=8C=E5=AF=B9=E5=BA=94=E7=9A=84=E9=93=BE=E5=
=BC=8F=E6=93=8D=E4=BD=9C=E3=80=82
func Register() error { =09var ( =09=09uid int64 =09=09err error =09) =09tx, err :=3D g.DB().Begin() =09if err !=3D nil { =09=09return err =09} =09// =E6=96=B9=E6=B3=95=E9=80=80=E5=87=BA=E6=97=B6=E6=A3=80=E9=AA=8C=E8=BF= =94=E5=9B=9E=E5=80=BC=EF=BC=8C =09// =E5=A6=82=E6=9E=9C=E7=BB=93=E6=9E=9C=E6=88=90=E5=8A=9F=E5=88=99=E6=89= =A7=E8=A1=8Ctx.Commit()=E6=8F=90=E4=BA=A4, =09// =E5=90=A6=E5=88=99=E6=89=A7=E8=A1=8Ctx.Rollback()=E5=9B=9E=E6=BB=9A= =E6=93=8D=E4=BD=9C=E3=80=82 =09defer func() { =09=09if err !=3D nil { =09=09=09tx.Rollback() =09=09} else { =09=09=09tx.Commit() =09=09} =09}() =09// =E5=86=99=E5=85=A5=E7=94=A8=E6=88=B7=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D= =AE =09uid, err =3D AddUserInfo(tx, g.Map{ =09=09"name": "john", =09=09"score": 100, =09=09//... =09}) =09if err !=3D nil { =09=09return err =09} =09// =E5=86=99=E5=85=A5=E7=94=A8=E6=88=B7=E8=AF=A6=E6=83=85=E6=95=B0=E6=8D= =AE=EF=BC=8C=E9=9C=80=E8=A6=81=E7=94=A8=E5=88=B0=E4=B8=8A=E4=B8=80=E6=AC=A1= =E5=86=99=E5=85=A5=E5=BE=97=E5=88=B0=E7=9A=84=E7=94=A8=E6=88=B7uid =09err =3D AddUserDetail(tx, g.Map{ =09=09"uid": uid, =09=09"phone": "18010576259", =09=09//... =09}) =09return err } func AddUserInfo(tx gdb.TX, data g.Map) (int64, error) { =09result, err :=3D g.Model("user").TX(tx).Data(data).Insert() =09if err !=3D nil { =09=09return 0, err =09} =09uid, err :=3D result.LastInsertId() =09if err !=3D nil { =09=09return 0, err =09} =09return uid, nil } func AddUserDetail(tx gdb.TX, data g.Map) error { =09_, err :=3D g.Model("user_detail").TX(tx).Data(data).Insert() =09return err }