生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。人

随笔 - 151  文章 - 0  评论 - 117  阅读 - 108万 

下面我们将从零开始实现一个简单的 Go 后端接口。这个接口将使用 mux 库来处理路由,并提供一个基本的 RESTful API。

1. 安装必要的库

首先,确保已经安装了 mux 库。如果没有安装,可以使用以下命令安装:

go get -u github.com/gorilla/mux

2. 创建项目结构

创建一个新的 Go 项目目录,并在其中创建必要的文件和文件夹。例如:

my-backend-api/
├── main.go
├── handlers/
│   └── user.go
└── models/
    └── user.go

3. 编写模型 (models)

在 models/user.go 中定义一个简单的用户模型:

package models

type User struct {
    ID    string `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

4. 编写处理函数 (handlers)

在 handlers/user.go 中定义处理用户相关请求的函数:

package handlers

import (
    "encoding/json"
    "net/http"
    "github.com/gorilla/mux"
    "my-backend-api/models"
)

var users = map[string]models.User{
    "1": {ID: "1", Name: "Alice", Email: "alice@example.com"},
    "2": {ID: "2", Name: "Bob", Email: "bob@example.com"},
}

func GetUsers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(users)
}

func GetUser(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    params := mux.Vars(r)
    id := params["id"]
    if user, ok := users[id]; ok {
        json.NewEncoder(w).Encode(user)
    } else {
        w.WriteHeader(http.StatusNotFound)
        json.NewEncoder(w).Encode(map[string]string{"error": "User not found"})
    }
}

func CreateUser(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    var user models.User
    err := json.NewDecoder(r.Body).Decode(&user)
    if err != nil {
        w.WriteHeader(http.StatusBadRequest)
        json.NewEncoder(w).Encode(map[string]string{"error": "Invalid request payload"})
        return
    }
    users[user.ID] = user
    json.NewEncoder(w).Encode(user)
}

func UpdateUser(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    params := mux.Vars(r)
    id := params["id"]
    var updatedUser models.User
    err := json.NewDecoder(r.Body).Decode(&updatedUser)
    if err != nil {
        w.WriteHeader(http.StatusBadRequest)
        json.NewEncoder(w).Encode(map[string]string{"error": "Invalid request payload"})
        return
    }
    if _, ok := users[id]; ok {
        updatedUser.ID = id
        users[id] = updatedUser
        json.NewEncoder(w).Encode(updatedUser)
    } else {
        w.WriteHeader(http.StatusNotFound)
        json.NewEncoder(w).Encode(map[string]string{"error": "User not found"})
    }
}

func DeleteUser(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    params := mux.Vars(r)
    id := params["id"]
    if _, ok := users[id]; ok {
        delete(users, id)
        json.NewEncoder(w).Encode(map[string]string{"result": "User deleted"})
    } else {
        w.WriteHeader(http.StatusNotFound)
        json.NewEncoder(w).Encode(map[string]string{"error": "User not found"})
    }
}

5. 编写主程序 (main.go)

在 main.go 中设置路由并启动服务器:

package main

import (
    "fmt"
    "net/http"
    "github.com/gorilla/mux"
    "my-backend-api/handlers"
)

func main() {
    r := mux.NewRouter()

    r.HandleFunc("/users", handlers.GetUsers).Methods("GET")
    r.HandleFunc("/users/{id}", handlers.GetUser).Methods("GET")
    r.HandleFunc("/users", handlers.CreateUser).Methods("POST")
    r.HandleFunc("/users/{id}", handlers.UpdateUser).Methods("PUT")
    r.HandleFunc("/users/{id}", handlers.DeleteUser).Methods("DELETE")

    fmt.Println("Starting server at port 8080")
    if err := http.ListenAndServe(":8080", r); err != nil {
        fmt.Println("Error starting server:", err)
    }
}

6. 运行程序

在项目根目录下运行以下命令启动服务器:

go run main.go

现在,应该有一个简单的 RESTful API 服务器在 http://localhost:8080 上运行。可以使用 curl 或 Postman 等工具来测试这些接口。例如:

  • 获取所有用户:GET http://localhost:8080/users
  • 获取单个用户:GET http://localhost:8080/users/1
  • 创建用户:POST http://localhost:8080/users 并发送 JSON 数据
  • 更新用户:PUT http://localhost:8080/users/1 并发送 JSON 数据
  • 删除用户:DELETE http://localhost:8080/users/1

这样,就完成了一个简单的 Go 后端接口的编写。

 

posted on   测试开发喵  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2019-08-29 导入java web项目时 web.xml第一行报错
2019-08-29 java启动server时报端口无效解决方法
点击右上角即可分享
微信分享提示