【golang學習筆記 gin 】1.1 路由封裝和mysql 的使用封裝

安裝gin

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

創建相關目錄

gotest->conifg->database.go->redis.go->controller ->index.go->model->user.go->router->router.gomain.go 

在這里插入圖片描述

創建用戶模型

package model
import ("gotest/config"
)
type User struct {ID   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func GetUsers() ([]User, error) {var users []User rows, err :=config.DB.Query("SELECT id, name, age FROM users")if err != nil {return nil, err}defer rows.Close()for rows.Next() {var user Userif err := rows.Scan(&user.ID, &user.Name, &user.Age); err != nil {return nil, err}users = append(users, user)}return users, nil
}
//插入
func InsertUser(user *User) (int, error) {result, err := config.DB.Exec("INSERT INTO users(name, age) VALUES(?,?)", user.Name, user.Age)if err != nil {return  0, err}id,err := result.LastInsertId() // 獲取最后插入的IDif err != nil {return  0, err}return int(id),nil
}
//更新
func UpdateUser(user *User) (int, error) {result, err := config.DB.Exec("UPDATE users SET name=?, age=? WHERE id=?", user.Name, user.Age, user.ID)if err != nil {return  0, err}rowsAffected, err := result.RowsAffected() // 獲取影響的行數if rowsAffected == 0 {return  0, err}return int(rowsAffected),nil
}
//刪除
func DeleteUser(id int)  (int, error) {result, err := config.DB.Exec("DELETE FROM users WHERE id=?", id)if err != nil {return  0, err}rowsAffected, err := result.RowsAffected() // 獲取影響的行數if rowsAffected == 0 {return  0, err}return int(rowsAffected),nil
}

封裝mysql連接

package configimport ("database/sql""log"_ "github.com/go-sql-driver/mysql" // 導入MySQL驅動
)var DB *sql.DBfunc InitDB() {var err errordsn := "root:root@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" // 替換為你的數據庫信息DB, err = sql.Open("mysql", dsn)if err != nil {log.Fatalf("Error opening database: %v", err)}err = DB.Ping()if err != nil {log.Fatalf("Error pinging database: %v", err)}log.Println("Connected to database")
}

main.go

package main
import ("gotest/router""gotest/config"
)
func main() {config.InitDB() // 初始化數據庫連接r := router.SetupRouter() // 使用路由設置函數來初始化路由和中間件等。r.Run(":8080")            // 監聽并在 0.0.0.0:8080 上啟動服務。默認情況下,Gin使用的是HTTP協議。如果你需要HTTPS,可以使用`r.RunTLS(":8080", "certfile", "keyfile")`。
}

調用DB

package controllerimport ("github.com/gin-gonic/gin""gotest/config""gotest/model"
)
//查列表
func UserHandler(c *gin.Context){list,err :=model.GetUsers();if err != nil {c.JSON(500,gin.H{"message": "Error","data":err.Error(),})}c.JSON(200,gin.H{"message": "User List","data":list,})
}
func UserInsertHandler(c *gin.Context) {name := "adsdklss"age := 18user := &model.User{	Name: name,Age:  age,}id, err := model.InsertUser(user)if err != nil {c.JSON(500, gin.H{"message": "Error","data": err.Error(),})}c.JSON(200, gin.H{"message": "Insert success","data": id,})
}func UserUpdateHandler(c *gin.Context) {name := "修改名字"age := 18user := &model.User{	Name: name,Age:  age,ID:   1,}id, err := model.UpdateUser(user)if err != nil {c.JSON(500, gin.H{"message": "Error","data": err.Error(),})}c.JSON(200, gin.H{"message": "Update success","data": id,})
}func UserDelHandler(c *gin.Context) {uid :=1;id, err := model.DeleteUser(uid)if err != nil {c.JSON(500, gin.H{"message": "Error","data": err.Error(),})}c.JSON(200, gin.H{"message": "del success","data": id,})
}

啟動服務

   go run  main.go

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96396.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96396.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96396.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL 層面行轉列

背景:如果對一些評論、點贊、收藏等互動數據,使用了按照 type 分類存儲,num 也是對應的。這樣如果創建一個帖子,那么就會出現 3 行數據(type 不同,num 不同,對應評論點贊和收藏)&…

langchain4j筆記篇(陽哥)

一 概述1.1 概述langchain4j:langchain for java1.2 作用langchain4j的目標是簡化將LLM集成到java應用程序中的過程。二 案例簡單helloworld2.1 大模型調用三件套1.阿里百煉平臺的通義模型: https://bailian.console.aliyun.com/2獲取api-key&#x…

有鹿機器人的365天奇幻日記:我在景區當掃地僧

第一章 古建守護者:2cm的極致藝術琉璃瓦下的秘密記得那是個晨霧繚繞的清晨,我接到首個重要任務:清掃明代琉璃碑亭。這里的每塊地磚都是文物,傳統清潔工具根本不敢靠近。每天以2cm的精準貼邊沿碑座作業,如今我每周都要為…

Objective-C方法參數標簽怎么設置

在Objective-C中,方法名稱可以通過幾個標簽名稱組成,這是跟C/C中完全不一樣的地方。每個標簽都是字段冒號的寫法,冒號后面是方法的參數,參數包括參數類型和參數變量,其中參數類型要用括號括起。方法參數的標簽是通過在…

20250910_《SQL Server 數據庫事務日志定期清理方案(精簡優化版)》以10.1.1.31服務器的gtp-default數據庫為例

《SQL Server 數據庫事務日志定期清理方案(精簡優化版)》 一、前提條件 數據庫 gtp-default 已設置為完整恢復模式 (FULL)。 每天凌晨02:00執行完整備份,保證日志備份可用。 SQL Server Agent 已啟用。 作業所有者為 sa,具有 sysadmin 權限。 Agent 服務賬號 NT Service\S…

實習項目包裝--HTTP 協議和 Web API

好的,完全沒問題!你問到了一個非常核心且基礎的知識領域,這是現代Web開發和幾乎所有網絡應用的基石。我們暫別嵌入式系統,專門來上一堂關于 HTTP 協議和 Web API 的詳細課程。 我會從最根本的概念講起,逐步深入到你所…

ICCV-2025 | 中科院自動化所世界模型助力具身導航!NavMorph:連續環境中的視覺語言導航自演化世界模型

作者:Xuan Yao1,2^{1,2}1,2, Junyu Gao1,2^{1,2}1,2, Changsheng Xu1,2,3^{1,2,3}1,2,3單位:1^{1}1中科院自動化所多模態人工智能系統國家重點實驗室,2^{2}2中國科學院大學人工智能學院,3^{3}3鵬城實驗室論文標題:NavM…

【ARDUINO】ESP8266的AT指令返回內容集合

一、基礎測試指令(確認模塊通信) 1. AT(測試模塊是否響應) 功能:檢測ESP8266與控制器(如Arduino)的串口通信是否正常。 返回內容: 成功:OK(無額外數據,僅確認通信正常) 失敗:無返回(可能是波特率不匹配、接線錯誤) 示例:發送:AT 返回: OK二、Wi-Fi模式配置指…

Mockoon:開源免費的本地Mock服務工具,提升前后端聯調效率

你有沒有過這種經歷?做前端開發時,后端同事的接口還沒寫完,你這邊要調頁面數據,只能對著空控制臺發呆?要么手動寫個 JSON 文件當假數據,改一次數據就得重新保存文件、刷新頁面;要么用在線 Mock …

【Mysql|第一篇】Mysql的安裝與卸載、Navicat工具的使用

一、Mysql的安裝與卸載: 1、查看是否安裝過mysql: (1)cmd中輸入mysql看是否有顯式提醒 (2)右擊此電腦,選擇管理,在左側欄中找到服務,查看是否有與mysql相關的 2、卸載的…

貪心算法應用:流行病干預策略問題詳解

Java中的貪心算法應用:流行病干預策略問題詳解 貪心算法是一種在每一步選擇中都采取當前狀態下最優的選擇,從而希望導致全局最優解的算法策略。在流行病干預策略問題中,貪心算法可以有效地幫助我們做出資源分配決策,以達到最優的防…

git刪除最近一次提交包括歷史記錄。

方法一:刪除最近的一次提交(最常見) 如果你只是想撤銷最后一次提交,這是最簡單的方法。在本地刪除提交 使用 git reset --hard 命令,將你的本地分支回退到上一次提交。Bashgit reset --hard HEAD^HEAD^ 指的是 HEAD 的…

前端拖拽功能實現全攻略

前端拖拽功能實現指南 設計一個拖拽組件確實需要考慮不少細節。下面我為你梳理了從核心思路、關鍵實現到注意事項的完整方案,并用表格對比了 Vue 和 React 的實現差異,希望能幫你全面掌握。 🧠 一、核心設計思路 一個拖拽組件的核心在于感…

ASP.NET MVC 連接 MySQL 數據庫查詢示例

為您創建一個完整的 ASP.NET MVC 應用程序,演示如何通過點擊按鈕連接 MySQL 數據庫并查詢數據表。 完整實現步驟 1. 首先安裝必要的 NuGet 包 在項目中安裝以下 NuGet 包: MySql.Data Dapper(可選,用于簡化數據訪問&#xff0…

合理安排時間節點,避免影響正常生產——制造企業軟件系統上線的關鍵考量

在制造企業的發展中,引入新的軟件系統是提升管理效率、優化業務流程的重要舉措。然而,軟件系統的上線過程如果安排不當,很可能會對企業的正常生產造成負面影響。作為一名制造企業的行政經理,在軟件選型和推進使用的過程中&#xf…

【一包通刷】晶晨S905L(B)/S905L2(B)/S905L3(B)-原機安卓4升級安卓7/安卓9-通刷包

【一包通刷】晶晨S905L(B)/S905L2(B)/S905L3(B)-原機安卓4升級安卓7/安卓9-通刷固件包線刷方法:1、準備好一根雙公頭USB線刷刷機線,長度30-50CM長度最佳,同時準備一臺電腦;2、電腦上安裝好刷機工…

Vite開發:從入門到精通

序章:構建之道現代前端的破局者前端發展簡史:從 Grunt、Gulp、Webpack 到 Vite構建工具的本質與未來為什么是 Vite?——新時代的構建哲學本書閱讀導覽與學習路徑第一篇 入門啟蒙識得 Vite 真面目第1章 Vite 初識什么是 Vite?設計理…

Spring事件監聽機制(二)

接著之前的事件監聽機制實現,我們可以進一步優化。從以下兩個方面:1.使用EventListener注解Configuration public class TestListener2 {public static void main(String[] args) {AnnotationConfigApplicationContext context new AnnotationConfigApp…

STM32物聯網項目---ESP8266微信小程序結合OneNET平臺MQTT實現STM32單片機遠程智能控制---代碼篇(四)

一、簡介該篇代碼實現了ESP8266上傳數據到云平臺的功能(可以更改命令和溫度的數據),我只測試了上傳數據,是沒有問題的,如果自己由別的需求可以自行在云平臺創建設備和更改代碼:二、工程源碼這個代碼是進行驗…

城際班車駕駛員安全學習課程

背景 正在做一個班車預約小程序,里面需要增加一個功能:駕駛員在線學習打卡功能: 圖文學習內容,學習完之后,一鍵打卡:學習完畢;視頻學習內容,看完后,一鍵打卡&#xff1…