上一篇文章我们准备好了对应的开发环境,本文的话,我们直接编写一个带有数据库操作的MVC项目web接口。示例如下:
一、准备mysql
首先我们准备一个mysql,然后创建一个名称为test的库,再创建一张users表,示例如下:
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, `deleted_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
二、编写web项目
整个web项目采用类似java的mvc模式来进行构建,整体的目录结构如下:
下面我们挨个来展示对应的代码:
config.go代码
package config import ( "gorm.io/driver/mysql" "gorm.io/gorm" ) var DB *gorm.DB func ConnectDatabase() { dsn := "root:123456@tcp(192.168.1.249:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" var err error DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic("Failed to connect to database") } }
userController.go代码
package controllers import ( "awesomeProject/config" "awesomeProject/models" "github.com/gin-gonic/gin" "net/http" ) func RegisterUser(c *gin.Context) { var user models.User if err := c.ShouldBindJSON(&user); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } config.DB.Create(&user) c.JSON(http.StatusCreated, user) }
jwt.go代码
package middleware import ( "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" "net/http" ) func AuthenticateJWT() gin.HandlerFunc { return func(c *gin.Context) { tokenString := c.GetHeader("Authorization") if tokenString == "" { c.JSON(http.StatusUnauthorized, gin.H{"error": "Authorization header required"}) c.Abort() return } token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte("your-secret-key"), nil }) if err != nil || !token.Valid { c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"}) c.Abort() return } c.Next() } }
user.go代码
package models import "gorm.io/gorm" type User struct { gorm.Model Username string `json:"username"` Password string `json:"password"` }
routes.go代码
package routes import ( "awesomeProject/controllers" "awesomeProject/middleware" "github.com/gin-gonic/gin" ) func SetupRouter() *gin.Engine { r := gin.Default() r.POST("/resgister", controllers.RegisterUser) authorized := r.Group("/api") authorized.Use(middleware.AuthenticateJWT()) { } return r }
utils.go代码
package utils
备注:
这里utils.go代码暂时用不着,稍后的介绍里面再进行使用。所以这里暂时留着。
main.go代码:
package main import ( "awesomeProject/config" "awesomeProject/routes" ) //TIP To run your code, right-click the code and select <b>Run</b>. Alternatively, click // the <icon src="AllIcons.Actions.Execute"/> icon in the gutter and select the <b>Run</b> menu item from here. func main() { config.ConnectDatabase() r := routes.SetupRouter() r.Run(":48080") } //TIP See GoLand help at <a href="https://www.jetbrains.com/help/go/">jetbrains.com/help/go/</a>. // Also, you can try interactive lessons for GoLand by selecting 'Help | Learn IDE Features' from the main menu.
至此,我们整个mvc的web项目代码就完成了,这里我们启动起来演示一下:
首先启动web项目:
然后我们使用apipost调用/register接口
然后我们查看数据库,可以看到数据库新增了wangwu这个用户
以上就是我们使用mvc模式编写web接口,随后我们再进行各种完善。
还没有评论,来说两句吧...