VUE3+GO个人博客系统:使用 Go 和 MySQL 创建后端服务

目录

创建数据库表

连接数据库

实现 CRUD 操作

处理跨域请求


在构建个人博客系统时,我们需要一个后端服务来处理各种请求,如获取文章列表,获取文章详情,发布文章,编辑文章等。在这篇博客中,我将教你如何使用 Go 语言和 MySQL 数据库来创建这样的后端服务。

创建数据库表

首先,我们需要在 MySQL 中创建一个新的数据库和表来存储我们的文章数据。假设我们的数据库名为 blog,我们的表名为 articles,我们可以使用以下的 SQL 语句来创建这个表:

CREATE DATABASE blog;

USE blog;

CREATE TABLE articles (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  content TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

在这个表中,我们有 5 个字段:idtitlecontentcreated_atupdated_atid 是主键,自动递增。titlecontent 用于存储文章的标题和内容。created_atupdated_at 用于存储文章的创建时间和更新时间。

连接数据库

然后,我们需要在 Go 程序中连接到这个数据库。我们可以使用 database/sql 包和 github.com/go-sql-driver/mysql 包来实现这个功能。首先,我们需要导入这两个包:

import (
  "database/sql"
  _ "github.com/go-sql-driver/mysql"
)

然后,我们可以在 main 函数中创建一个新的数据库连接:

 
 
func main() {
  db, err := sql.Open("mysql", "user:password@/blog")
  if err != nil {
    log.Fatal(err)
  }
  defer db.Close()

  // other code
}

在这段代码中,我们使用 sql.Open 函数创建一个新的数据库连接。这个函数需要两个参数:驱动名和数据源名。驱动名为 mysql,数据源名的格式为 user:password@/dbname。如果连接失败,我们使用 log.Fatal 函数打印错误信息并退出程序。最后,我们使用 defer 语句确保数据库连接在 main 函数返回时被关闭。

实现 CRUD 操作

接下来,我们需要实现 CRUD(创建,读取,更新,删除)操作。首先,我们需要在 main.go 文件中定义一个新的结构体 Article 来表示文章:

type Article struct {
  ID        int
  Title     string
  Content   string
  CreatedAt time.Time
  UpdatedAt time.Time
}

然后,我们可以实现以下的函数来进行 CRUD 操作:

 
 
func getArticles(db *sql.DB) ([]Article, error) {
  rows, err := db.Query("SELECT * FROM articles")
  if err != nil {
    return nil, err
  }
  defer rows.Close()

  var articles []Article
  for rows.Next() {
    var a Article
    if err := rows.Scan(&a.ID, &a.Title, &a.Content, &a.CreatedAt, &a.UpdatedAt); err != nil {
      return nil, err
    }
    articles = append(articles, a)
  }

  return articles, nil
}

func getArticle(db *sql.DB, id int) (Article, error) {
  var a Article
  err := db.QueryRow("SELECT * FROM articles WHERE id = ?", id).Scan(&a.ID, &a.Title, &a.Content, &a.CreatedAt, &a.UpdatedAt)
  return a, err
}

func createArticle(db *sql.DB, title, content string) (int, error) {
  res, err := db.Exec("INSERT INTO articles (title, content) VALUES (?, ?)", title, content)
  if err != nil {
    return 0, err
  }

  id, err := res.LastInsertId()
  return int(id), err
}

func updateArticle(db *sql.DB, id int, title, content string) error {
  _, err := db.Exec("UPDATE articles SET title = ?, content = ? WHERE id = ?", title, content, id)
  return err
}

func deleteArticle(db *sql.DB, id int) error {
  _, err := db.Exec("DELETE FROM articles WHERE id = ?", id)
  return err
}

在这些函数中,我们使用 db.Querydb.QueryRowdb.Exec 函数来执行 SQL 语句,并使用 rows.Scanrow.Scan 函数来将结果赋值给变量。

处理跨域请求

最后,我们需要处理跨域请求。为了实现这个功能,我们可以使用一个名为 github.com/gin-contrib/cors 的中间件。首先,我们需要安装这个中间件:

go get github.com/gin-contrib/cors

然后,我们可以在 main 函数中使用这个中间件:

 
 
import (
  "github.com/gin-contrib/cors"
  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  r.Use(cors.Default())

  // other code
}

在这段代码中,我们使用 gin.Default 函数创建一个新的路由器,并使用 r.Use 函数添加 cors.Default 中间件。这个中间件会自动处理所有的跨域请求。

以上就是使用 Go 和 MySQL 创建后端服务的全部内容。希望这篇博客对你有所帮助。如果你有任何疑问,欢迎在评论区留言。

猜你喜欢

转载自blog.csdn.net/m0_68036862/article/details/131156836