golang 例子编写一个简单的评论接口
以下是一个简单的Go语言示例,实现了一个基于HTTP的评论接口。这个接口允许用户提交评论,并且可以获取所有评论列表。
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
// Comment 结构体代表一个评论
type Comment struct {
ID int `json:"id"`
Content string `json:"content"`
}
// comments 是一个用于存储评论的全局变量
var comments []Comment
// 处理提交评论的HTTP POST请求
func submitHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
http.Error(w, "Not allowed", http.StatusMethodNotAllowed)
return
}
var comment Comment
if err := json.NewDecoder(r.Body).Decode(&comment); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// 为评论分配一个唯一的ID
comment.ID = len(comments) + 1
comments = append(comments, comment)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(comment)
}
// 处理获取所有评论的HTTP GET请求
func listHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, "Not allowed", http.StatusMethodNotAllowed)
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(comments)
}
func main() {
http.HandleFunc("/submit", submitHandler)
http.HandleFunc("/list", listHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
这段代码定义了一个简单的Comment
结构体,用于表示评论。它还有一个全局的comments
切片用来存储所有评论。submitHandler
函数处理提交评论的HTTP POST请求,它将评论内容添加到comments
切片中,并为评论分配一个新的ID。listHandler
函数处理获取所有评论的HTTP GET请求,它返回存储在comments
切片中的所有评论。
这个简单的服务器运行在端口8080上,并且可以接受两个路由/submit
和/list
的请求。通过向/submit
发送POST请求,可以提交新的评论,而向/list
发送GET请求,则可以获取所有评论列表。
评论已关闭