从0搭建一个go项目

你的项目根目录执行命令初始化
go mod init 项目名

# 推荐:用你的仓库地址(如GitHub),没有就随便写
go mod init github.com/yourname/myproject

# 简单写法
go mod init myapp 

简易go文件
package main

import (
    "net/http"
    "time"

    "github.com/gin-contrib/cors"
    "github.com/gin-gonic/gin"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

// ====================== 数据库配置(你直接用自己的)======================
const (
    dbUser     = "root"           // 你能用的MySQL用户名
    dbPassword = "" // 你的密码
    dbName     = "testdb"         // 数据库
    dbHost     = "127.0.0.1"
    dbPort     = "3306"
)

// 全局DB
var db *gorm.DB

// User 数据表模型
type User struct {
    gorm.Model
    Name string `json:"name"`
    Age  uint   `json:"age"`
    City string `json:"city"`
}

// 初始化MySQL
func initDB() {
    dsn := dbUser + ":" + dbPassword + "@tcp(" + dbHost + ":" + dbPort + ")/" + dbName + "?charset=utf8mb4&parseTime=True&loc=Local"
    var err error
    db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("数据库连接失败")
    }

    // 自动建表
    db.AutoMigrate(&User{})
}

func main() {
    // 初始化数据库
    initDB()

    // 创建Gin路由
    r := gin.Default()

    // 跨域中间件(必须在路由注册之前)
    r.Use(cors.New(cors.Config{
        AllowOrigins:              []string{"http://localhost:5173"},
        AllowMethods:              []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
        AllowHeaders:              []string{"Origin", "Content-Type", "Authorization"},
        MaxAge:                    12 * time.Hour,
        OptionsResponseStatusCode: http.StatusOK, // 可选:把预检改成200
    }))
    // ======== 5个CRUD接口 =========
    // 1. 创建用户
    r.POST("/user", createUser)

    // 2. 获取单个用户
    r.GET("/user/:id", getUser)

    // 3. 获取用户列表
    r.GET("/users", getUserList)

    // 4. 修改用户
    r.PUT("/user/:id", updateUser)

    // 5. 删除用户
    r.DELETE("/user/:id", deleteUser)
    // 启动服务
    r.Run(":8080")
}

// 1. 创建用户
func createUser(c *gin.Context) {
    var user User
    c.ShouldBindJSON(&user)
    db.Create(&user)
    c.JSON(http.StatusOK, gin.H{"data": user})
}

// 2. 获取单个用户
func getUser(c *gin.Context) {
    id := c.Param("id")
    var user User
    db.First(&user, id)
    c.JSON(http.StatusOK, gin.H{"data": user})
}

// 3. 获取用户列表
func getUserList(c *gin.Context) {
    var users []User
    db.Find(&users)
    c.JSON(http.StatusOK, gin.H{"data": users})
}

// 4. 修改用户
func updateUser(c *gin.Context) {
    id := c.Param("id")
    var user User
    db.First(&user, id)

    var data User
    c.ShouldBindJSON(&data)

    user.Name = data.Name
    user.Age = data.Age
    user.City = data.City

    db.Save(&user)
    c.JSON(http.StatusOK, gin.H{"data": user})
}

// 5. 删除用户
func deleteUser(c *gin.Context) {
    id := c.Param("id")
    db.Delete(&User{}, id)
    c.JSON(http.StatusOK, gin.H{"message": "删除成功"})
}










posted @ 2026-04-01 17:30  Panax  阅读(18)  评论(0)    收藏  举报