29 05 2025
package main

import (
"encoding/json"
"fmt"

_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)

type Person struct {
ID   int    `db:"id" json:"id"`
Name string `db:"name" json:"name"`
Age  string `db:"age" json:"age"`
}

type insertd struct {
Name string `db:"name" json:"name"`
Age  int    `db:"age" json:"age"`
}

var Db *sqlx.DB

func init() {

database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/fa")
if err != nil {
fmt.Println("open mysql failed,", err)
return
}

Db = database
}

func selectdata(u_id int) {
var Person []Person
err := Db.Select(&Person, "select id, name, age from person where id=?", u_id)
if err != nil {
fmt.Println("exec failed, ", err)
return
}
fmt.Printf("Person: %v,类型:%T\n", Person, Person)
a, _ := json.Marshal(Person)
fmt.Println(string(a))
}
func insertdata(conn *sqlx.Tx) int {
var insertd insertd
insertd.Name = "张三"
insertd.Age = 20
r, err := conn.Exec("insert into person(name,age) values(?,?)", insertd.Name, insertd.Age)
// r, err := Db.NamedExec("insert into person(name,age) values(:name,:tags,:age)", insertd)
if err != nil {
fmt.Println("exec failed, ", err)
//事务回滚
conn.Rollback()
return 0
}
id, _ := r.LastInsertId()
fmt.Println("insert success", id)
return int(id)
}
func updatedata(u_id int, conn *sqlx.Tx) {
res, err := conn.Exec("update person set age=? where id=?", 30, u_id)
if err != nil {
fmt.Println("exec failed, ", err)
conn.Rollback()
return
}
row, err := res.RowsAffected()
if err != nil {
conn.Rollback()
fmt.Println("rows failed, ", err)
}
fmt.Println("update succ:", row)
}

func deletedata(u_id int, conn *sqlx.Tx) {
res, err := conn.Exec("delete from person where id=?", u_id)
if err != nil {
fmt.Println("exec failed, ", err)
conn.Rollback()
return
}

row, err := res.RowsAffected()
if err != nil {
fmt.Println("rows failed, ", err)
conn.Rollback()
}

fmt.Println("delete succ: ", row)
}

func main() {
//事务开启
conn, err := Db.Beginx()
if err != nil {
fmt.Println("begin failed :", err)
return
}
insert_id := insertdata(conn)
if insert_id == 0 {
fmt.Println("insert failed")
return
}
updatedata(insert_id, conn)
selectdata(insert_id)
deletedata(insert_id, conn)
//事务提交
conn.Commit()
}

延伸阅读
学习golang(十)
学习golang(二)
学习golang(九)
学习golang(四)
学习golang(一)
发表评论
最新|与我有关