最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go使用Gin寫一個(gè)對MySQL的增刪改查的實(shí)現(xiàn)

 更新時(shí)間:2025年07月08日 10:21:36   作者:柯南二號(hào)  
本文主要介紹了使用Go語言結(jié)合Gin和GORM框架創(chuàng)建users表,實(shí)現(xiàn)增刪查接口,配置mysql依賴并啟動(dòng)服務(wù)測試數(shù)據(jù)操作,具有一定的參考價(jià)值,感興趣的可以了解一下

首先用SQL創(chuàng)建一個(gè)包含id、name屬性的users表

create table users
(
    id   int auto_increment
        primary 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 int
		var name string
		err := 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)
}

根據(jù)姓名插入一個(gè)用戶信息

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})
}

根據(jù)id刪除一個(gè)用戶信息

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})
}

三個(gè)方法整合一起放到main.go文件里

package main

import (
	"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 int
		var name string
		err := 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-backend

go 1.24.0

require (
	github.com/go-sql-driver/mysql v1.9.2
	github.com/gorilla/mux v1.8.1
)

require filippo.io/edwards25519 v1.1.0 // indirect

然后啟動(dòng)

go run main.go

獲取用戶數(shù)據(jù)

http://localhost:8083/users

插入用戶數(shù)據(jù)

 http://localhost:8083/users

刪除用戶數(shù)據(jù) 

http://localhost:8083/users/4

到此這篇關(guān)于Go使用Gin寫一個(gè)對MySQL的增刪改查的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Gin MySQL增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 在Golang中正確的修改HTTPRequest的Host的操作方法

    在Golang中正確的修改HTTPRequest的Host的操作方法

    我們工作中經(jīng)常需要通過HTTP請求Server的服務(wù),比如腳本批量請求接口跑數(shù)據(jù),由于一些網(wǎng)關(guān)策略,部分Server會(huì)要求請求中Header里面附帶Host參數(shù),所以本文給大家介紹了如何在Golang中正確的修改HTTPRequest的Host,需要的朋友可以參考下
    2023-12-12
  • Go語言工程實(shí)踐單元測試基準(zhǔn)測試示例詳解

    Go語言工程實(shí)踐單元測試基準(zhǔn)測試示例詳解

    這篇文章主要為大家介紹了Go語言工程實(shí)踐單元測試基準(zhǔn)測試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 詳解如何在Go項(xiàng)目中輸出版本信息

    詳解如何在Go項(xiàng)目中輸出版本信息

    這篇文章主要介紹了詳解如何在Go項(xiàng)目中輸出版本信息,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Go語言通過smtp發(fā)送郵件的方法

    Go語言通過smtp發(fā)送郵件的方法

    這篇文章主要介紹了Go語言通過smtp發(fā)送郵件的方法,涉及Go語言發(fā)送郵件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 一文搞懂Go語言中文件的讀寫與創(chuàng)建

    一文搞懂Go語言中文件的讀寫與創(chuàng)建

    這篇文章主要為大家詳細(xì)介紹了Go語言中文件是如何實(shí)現(xiàn)讀寫與創(chuàng)建的,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Go語言有一定幫助,需要的可以參考一下
    2022-07-07
  • Go 語言中程序編譯過程詳解

    Go 語言中程序編譯過程詳解

    本文旨在深入探討Go語言的編譯機(jī)制和最新的模塊管理系統(tǒng)——Go Modules,通過詳細(xì)的示例和步驟,我們將演示從簡單的 “Hello World” 程序到使用第三方庫的更復(fù)雜項(xiàng)目的開發(fā)過程,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • golang中"var"與":="的區(qū)別解析

    golang中"var"與":="的區(qū)別解析

    這篇文章主要介紹了golang中“var”與“:=”的區(qū)別,使用var關(guān)鍵字是Go最基本的定義變量方式,有時(shí)也會(huì)使用到:=來定義變量,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Go語言中DateTime的用法介紹

    Go語言中DateTime的用法介紹

    這篇文章介紹了Go語言中DateTime的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Golang壓縮Jpeg圖片和PNG圖片的操作

    Golang壓縮Jpeg圖片和PNG圖片的操作

    這篇文章主要介紹了Golang壓縮Jpeg圖片和PNG圖片的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 淺析Go常量為什么只支持基本數(shù)據(jù)類型

    淺析Go常量為什么只支持基本數(shù)據(jù)類型

    這篇文章主要來和大家一起討論一下Golang中常量為什么只支持基本數(shù)據(jù)類型,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-09-09

最新評論

南乐县| 霍城县| 阿克苏市| 潢川县| 交口县| 武清区| 祁连县| 新绛县| 正安县| 五常市| 如东县| 秦皇岛市| 马龙县| 新野县| 河津市| 临沧市| 黄梅县| 龙口市| 海丰县| 龙游县| 天台县| 惠安县| 兴隆县| 交城县| 当涂县| 边坝县| 高密市| 南木林县| 九江县| 通化市| 东乌珠穆沁旗| 罗定市| 安多县| 靖远县| 吴江市| 德保县| 贵溪市| 兴城市| 高邑县| 莱西市| 沽源县|