欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > Go使用Gin写一个对MySQL的增删改查服务

Go使用Gin写一个对MySQL的增删改查服务

2025/5/14 4:50:10 来源:https://blog.csdn.net/qq_41688840/article/details/147795228  浏览:    关键词:Go使用Gin写一个对MySQL的增删改查服务

首先用SQL创建一个包含id、name属性的users表

create table users
(id   int auto_incrementprimary key,name varchar(255) null
);

查询所有用户信息:

func queryData(db *sql.DB, w http.ResponseWriter) {rows, err := db.Query("SELECT * FROM users")if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}defer rows.Close()var users []struct {ID   int    `json:"id"`Name string `json:"name"`}for rows.Next() {var id intvar name stringerr := rows.Scan(&id, &name)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}users = append(users, struct {ID   int    `json:"id"`Name string `json:"name"`}{id, name})}w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(users)
}

根据姓名插入一个用户信息

func insertData(db *sql.DB, name string, w http.ResponseWriter) {stmt, err := db.Prepare("INSERT INTO users(name) VALUES(?)")if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}defer stmt.Close()res, err := stmt.Exec(name)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}id, _ := res.LastInsertId()w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(map[string]int64{"id": id})
}

根据id删除一个用户信息

func deleteData(db *sql.DB, id int, w http.ResponseWriter) {stmt, err := db.Prepare("DELETE FROM users WHERE id=?")if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}defer stmt.Close()res, err := stmt.Exec(id)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}affected, _ := res.RowsAffected()w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(map[string]int64{"deleted": affected})
}

三个方法整合一起放到main.go文件里

package mainimport ("database/sql""encoding/json""log""net/http""strconv"_ "github.com/go-sql-driver/mysql""github.com/gorilla/mux"
)func main() {db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test_go")if err != nil {log.Fatal(err)}defer db.Close()r := mux.NewRouter()r.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {switch r.Method {case http.MethodGet:queryData(db, w)case http.MethodPost:var user struct{ Name string }if err := json.NewDecoder(r.Body).Decode(&user); err != nil {http.Error(w, err.Error(), http.StatusBadRequest)return}insertData(db, user.Name, w)}}).Methods("GET", "POST")r.HandleFunc("/insert", func(w http.ResponseWriter, r *http.Request) {if r.Method != http.MethodPost {http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)return}var user struct{ Name string }if err := json.NewDecoder(r.Body).Decode(&user); err != nil {http.Error(w, err.Error(), http.StatusBadRequest)return}insertData(db, user.Name, w)}).Methods("POST")r.HandleFunc("/users/{id}", func(w http.ResponseWriter, r *http.Request) {vars := mux.Vars(r)idStr := vars["id"]id, err := strconv.Atoi(idStr)if err != nil {http.Error(w, "Invalid ID", http.StatusBadRequest)return}deleteData(db, id, w)}).Methods("DELETE")log.Println("Server running at http://localhost:8083")log.Fatal(http.ListenAndServe(":8083", r))
}func queryData(db *sql.DB, w http.ResponseWriter) {rows, err := db.Query("SELECT * FROM users")if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}defer rows.Close()var users []struct {ID   int    `json:"id"`Name string `json:"name"`}for rows.Next() {var id intvar name stringerr := rows.Scan(&id, &name)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}users = append(users, struct {ID   int    `json:"id"`Name string `json:"name"`}{id, name})}w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(users)
}func insertData(db *sql.DB, name string, w http.ResponseWriter) {stmt, err := db.Prepare("INSERT INTO users(name) VALUES(?)")if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}defer stmt.Close()res, err := stmt.Exec(name)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}id, _ := res.LastInsertId()w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(map[string]int64{"id": id})
}func deleteData(db *sql.DB, id int, w http.ResponseWriter) {stmt, err := db.Prepare("DELETE FROM users WHERE id=?")if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}defer stmt.Close()res, err := stmt.Exec(id)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}affected, _ := res.RowsAffected()w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(map[string]int64{"deleted": affected})
}

1. 添加mysql的依赖

go get -u github.com/go-sql-driver/mysql

2. 添加gin的依赖

go get -u github.com/gin-gonic/gin

3. 添加对gorm的依赖

go get -u gorm.io/gorm

go.mod文件

module go-backendgo 1.24.0require (github.com/go-sql-driver/mysql v1.9.2github.com/gorilla/mux v1.8.1
)require filippo.io/edwards25519 v1.1.0 // indirect

然后启动

go run main.go

获取用户数据

http://localhost:8083/users

插入用户数据

 http://localhost:8083/users

删除用户数据 

http://localhost:8083/users/4

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词