在REST API中使用MySQL和Mux创建课程可以通过以下步骤实现:
CREATE TABLE courses (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
instructor VARCHAR(255),
start_date DATE,
end_date DATE
);
go get -u github.com/go-sql-driver/mysql
go get -u github.com/gorilla/mux
import (
"database/sql"
"encoding/json"
"log"
"net/http"
"github.com/gorilla/mux"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/database")
if err != nil {
log.Fatal(err)
}
defer db.Close()
router := mux.NewRouter()
initializeRoutes(router, db)
log.Fatal(http.ListenAndServe(":8000", router))
}
请注意,上述代码中的"username"、"password"和"database"应替换为您的MySQL数据库的凭据和数据库名称。
func initializeRoutes(router *mux.Router, db *sql.DB) {
router.HandleFunc("/courses", getCourses(db)).Methods("GET")
router.HandleFunc("/courses/{id}", getCourse(db)).Methods("GET")
router.HandleFunc("/courses", createCourse(db)).Methods("POST")
router.HandleFunc("/courses/{id}", updateCourse(db)).Methods("PUT")
router.HandleFunc("/courses/{id}", deleteCourse(db)).Methods("DELETE")
}
func getCourses(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// 执行查询语句,获取所有课程
rows, err := db.Query("SELECT * FROM courses")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
// 将查询结果转换为课程对象的切片
var courses []Course
for rows.Next() {
var course Course
err := rows.Scan(&course.ID, &course.Name, &course.Description, &course.Instructor, &course.StartDate, &course.EndDate)
if err != nil {
log.Fatal(err)
}
courses = append(courses, course)
}
// 将课程对象的切片转换为JSON格式并发送响应
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(courses)
}
}
func getCourse(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// 从URL参数中获取课程ID
params := mux.Vars(r)
id := params["id"]
// 执行查询语句,获取指定ID的课程
row := db.QueryRow("SELECT * FROM courses WHERE id = ?", id)
// 将查询结果转换为课程对象
var course Course
err := row.Scan(&course.ID, &course.Name, &course.Description, &course.Instructor, &course.StartDate, &course.EndDate)
if err != nil {
log.Fatal(err)
}
// 将课程对象转换为JSON格式并发送响应
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(course)
}
}
func createCourse(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// 解析请求体中的JSON数据
var course Course
json.NewDecoder(r.Body).Decode(&course)
// 执行插入语句,将课程信息插入数据库
result, err := db.Exec("INSERT INTO courses (name, description, instructor, start_date, end_date) VALUES (?, ?, ?, ?, ?)",
course.Name, course.Description, course.Instructor, course.StartDate, course.EndDate)
if err != nil {
log.Fatal(err)
}
// 获取插入操作的自增ID
id, _ := result.LastInsertId()
// 发送包含新课程ID的响应
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]int64{"id": id})
}
}
func updateCourse(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// 从URL参数中获取课程ID
params := mux.Vars(r)
id := params["id"]
// 解析请求体中的JSON数据
var course Course
json.NewDecoder(r.Body).Decode(&course)
// 执行更新语句,更新指定ID的课程信息
_, err := db.Exec("UPDATE courses SET name = ?, description = ?, instructor = ?, start_date = ?, end_date = ? WHERE id = ?",
course.Name, course.Description, course.Instructor, course.StartDate, course.EndDate, id)
if err != nil {
log.Fatal(err)
}
// 发送成功响应
w.WriteHeader(http.StatusOK)
}
}
func deleteCourse(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// 从URL参数中获取课程ID
params := mux.Vars(r)
id := params["id"]
// 执行删除语句,删除指定ID的课程
_, err := db.Exec("DELETE FROM courses WHERE id = ?", id)
if err != nil {
log.Fatal(err)
}
// 发送成功响应
w.WriteHeader(http.StatusOK)
}
}
type Course struct {
ID int `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Instructor string `json:"instructor"`
StartDate string `json:"start_date"`
EndDate string `json:"end_date"`
}
这样,您就可以使用MySQL和Mux在REST API中创建课程了。根据实际需求,您可以进一步扩展和优化代码。
企业创新在线学堂
云+社区沙龙online[数据工匠]
北极星训练营
高校公开课
云+社区技术沙龙[第17期]
Elastic 实战工作坊
Elastic 实战工作坊
企业创新在线学堂
Elastic 实战工作坊
领取专属 10元无门槛券
手把手带您无忧上云