当前位置:网站首页>Gorilla Mux 和 GORM 的使用方法
Gorilla Mux 和 GORM 的使用方法
2022-08-02 08:17:00 【nginx】
package mainimport (
"encoding/json"
"net/http"
"mybook/model"
"github.com/gorilla/mux"
"gorm.io/gorm"
)
type Server struct {
db *gorm.DB
}
type UpdateBook struct {
Price float64 `json:"price"`
Description string `json:"decription"`
Category string `json:"category"`
}
func NewServer(db *gorm.DB) *Server {
return &Server{db: db}
}
func (s *Server) RegisterRouter(router *mux.Router) {
router.HandleFunc("/books", s.getBooks)
router.HandleFunc("/book/{id}", s.getBook).Methods("GET")
router.HandleFunc("/book", s.createBook).Methods("POST")
router.HandleFunc("/book/{id}", s.updateBook).Methods("PUT")
router.HandleFunc("/book/{id}", s.deleteBook).Methods("DELETE")
}
func (s *Server) getBooks(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json;")
var books []model.Book
if err := s.db.Find(&books).Error; err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(books)
}
func (s *Server) createBook(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
var book model.Book
if err := json.NewDecoder(r.Body).Decode(&book); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
newBook := model.Book{Price: book.Price, Description: book.Description, Category: book.Category}
if err := s.db.Create(newBook).Error; err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(newBook)
}
func (s *Server) getBook(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
var book model.Book
vars := mux.Vars(r)
id := vars["id"]
if err := s.db.Where("id = ?", id).First(&book).Error; err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(book)
}
func (s *Server) updateBook(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
var updateBook UpdateBook
var book model.Book
vars := mux.Vars(r)
id := vars["id"]
if err := json.NewDecoder(r.Body).Decode(&updateBook); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if err := s.db.Where("id = ?", id).First(&book).Error; err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
if err := s.db.Model(&book).Updates(&model.Book{
Price: updateBook.Price,
Description: updateBook.Description,
Category: updateBook.Category}).Error; err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(book)
}
func (s *Server) deleteBook(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
var book model.Book
vars := mux.Vars(r)
id := vars["id"]
if err := s.db.Where("id = ?", id).First(&book).Error; err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
if err := s.db.Delete(&book).Error; err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode("Book Deleted Successfully!")
}
边栏推荐
- Biotin hydrazide HCl|CAS:66640-86-6|Biotin-hydrazide hydrochloride
- 【特别提醒】订阅此专栏的用户请先阅读本文再决定是否需要购买此专栏
- day_05模块
- Biotin-EDA|CAS:111790-37-5| Ethylenediamine biotin
- MySQL 中 count() 和 count(1) 有什么区别?哪个性能最好?
- 力扣:第 304 场周赛
- 如何做好项目管理
- Analysis of software testing technology How far is Turing test from us
- R language plotly visualization: use the plotly visualization model to predict the true positive rate (True positive) TPR and false positive rate (False positive) FPR curve under different thresholds
- IO process thread -> process -> day4
猜你喜欢
CASA模型、CENTURY模型应用与案例分析
如何做好项目管理
Biotin-C6-amine|N-生物素基-1,6-己二胺|CAS:65953-56-2
EPSANet: An Efficient Pyramid Split Attention Block on Convolutional Neural Network
Shell变成规范与变量
PostgreSQL learning summary (11) - PostgreSQL commonly used high-availability cluster solutions
PyQt5(一) PyQt5安装及配置,从文件夹读取图片并显示,模拟生成素描图像
编程与哲学(2)——输出是为了更好的输入
Biotin-EDA|CAS:111790-37-5| Ethylenediamine biotin
USACO美国信息学奥赛竞赛12月份开赛,中国学生备赛指南
随机推荐
R语言plotly可视化:plotly可视化回归模型实际值和回归预测值的散点图分析回归模型的预测效能、一个好的模型大部分的散点在对角线附近(predicted vs actual)
EPSANet: An Efficient Pyramid Split Attention Block on Convolutional Neural Network
BGP通过MPLS解决路由黑洞
RestTemlate源码分析及工具类设计
小说里的编程 【连载之二十五】元宇宙里月亮弯弯
Biotin-EDA|CAS:111790-37-5| Ethylenediamine biotin
postman使用方法
High imitation [Huawei consumer business official website] and wonderful animation analysis: practice embedding JS code in low-code platform
Wang Xuegang - compiled shipment line file
What is the function of page directive contentPage/pageEncoding in JSP page?
Spark 系统性学习笔记系列
Shell变成规范与变量
OneNote Tutorial, How to Create More Spaces in OneNote?
Redisson实现分布式锁
知识点滴 - 为什么一般不用铜锅做菜
如何建立私域流量?私域流量对企业有什么好处?
pycharm的基本使用教程(1)
etcd implements large-scale service governance application combat
AttributeError: module ‘clr‘ has no attribute ‘AddReference‘
nodejs 简介