卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章56586本站已运行406

如何使用 Golang 构建 RESTful API 并连接 MySQL 数据库?

使用 golang 构建 restful api 并连接 mysql 数据库:安装 golang、mysql 驱动程序和创建项目。定义 api 处理程序,包括获取所有用户和特定用户。通过 sql.open 函数连接到 mysql 数据库。使用 db.query 和 db.queryrow 从数据库中获取数据。使用 json.newencoder 编写 json 响应。可选:提供创建新用户的代码示例。

如何使用 Golang 构建 RESTful API 并连接 MySQL 数据库?

如何使用 Golang 构建 RESTful API 并连接 MySQL 数据库

介绍

RESTful API 是一种基于 HTTP 协议的 API 类型,可简化客户端与服务器之间的交互。使用 Golang 构建 RESTful API 可以充分利用其高性能和并发性优势。本文将指导你如何使用 Golang 构建一个 RESTful API,并连接到 MySQL 数据库。

先决条件

  • 安装 Golang(版本 1.18 或更高)
  • MySQL 数据库和 MySQL 驱动程序(github.com/go-sql-driver/mysql)
  • 文本编辑器或 IDE(如 Visual Studio Code)

构建 RESTful API

  1. 创建新项目:使用 go mod init 命令创建新项目。
  2. 安装 MySQL 驱动程序:使用 go get -u github.com/go-sql-driver/mysql 命令安装 MySQL 驱动程序。
  3. 编写 API 处理程序:在 main.go 文件中编写以下 API 处理程序:
package main

import (
    "database/sql"
    "log"
    "net/http"
    "strconv"

    "github.com/go-sql-driver/mysql"
)

const (
    user     = "root"
    password = ""
    host     = "localhost"
    port     = 3306
    database = "my_db"
)

var db *sql.DB

func init() {
    dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?parseTime=true", user, password, host, port, database)
    var err error
    db, err = sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }
}

func main() {
    http.HandleFunc("/users", handleUsers)
    http.HandleFunc("/users/", handleUser)
    log.Fatal(http.ListenAndServe(":8080", nil))
}
  1. 连接到 MySQL 数据库:使用 sql.Open 函数连接到 MySQL 数据库。
  2. 定义路由处理程序:使用 http.HandleFunc 函数定义两个路由处理程序:/users 和 /users/:id。
  3. 运行服务器:使用 http.ListenAndServe 函数启动服务器。

处理用户请求

  1. 获取所有用户:在 /users 处理程序中,使用 db.Query 函数从数据库中获取所有用户。
  2. 获取特定用户:在 /users/:id 处理程序中,使用 db.QueryRow 函数从数据库中获取特定用户。
  3. 编写响应:使用 json.NewEncoder 函数将用户数据编码为 JSON 并写入到 HTTP 响应中。

实战案例

假设你的 MySQL 数据库中有名为 users 的表,其结构如下:

CREATE TABLE users (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  PRIMARY KEY (id)
);

你可以使用以下代码创建新用户并将其添加到数据库中:

func handleCreateUser(w http.ResponseWriter, r *http.Request) {
    var user User
    if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
        http.Error(w, "Invalid JSON", http.StatusBadRequest)
        return
    }

    stmt, err := db.Prepare("INSERT INTO users (name, email) VALUES (?, ?);")
    if err != nil {
        log.Fatal(err)
    }
    defer stmt.Close()

    res, err := stmt.Exec(user.Name, user.Email)
    if err != nil {
        log.Fatal(err)
    }

    id, err := res.LastInsertId()
    if err != nil {
        log.Fatal(err)
    }

    user.ID = int(id)
    json.NewEncoder(w).Encode(user)
}

注意:不要忘记更新数据库连接信息以及跨域请求相关的处理机制。

卓越飞翔博客
上一篇: 如何使用 Golang 构建 RESTful API 并集成 Websockets?
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏