两张图对比:
https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6068eff627c84507a30e1571884c6913~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.awebp学php的朋友或许会陌生,但是学Java那是刻苦铭心!
其实,在学go的时候不一定要这样分层,但是习惯了你就会觉得这样分,优雅!
https://blog.csdn.net/qq_46429858/article/details/124376456
...
反正,我也闹不清楚,只是跟着做
所以,把教程奉上 本帖最后由 legs+ 于 2023-5-24 20:06 编辑
中间件,以前,我闹不清楚。
以前无论C#或者Java都是通过程序流程或代码来实现,后来学深了感觉还是中间件好,透过AOP(切面)更理想。
就是封装的太厉害了
本帖最后由 legs+ 于 2023-5-24 20:27 编辑
我看现在的一些初学者喜欢,刷题,go的题都有人刷,而且还不少
我奉劝去刷Java、c#或c++
go的题,没有啥技术含量 写了一个小Demo:
func SetupRouter() *gin.Engine {
if setting.Conf.Release {
gin.SetMode(gin.ReleaseMode)
}
r := gin.Default()
// 告诉gin框架模板文件引用的静态文件去哪里找
r.Static("/static", "static")
// 告诉gin框架去哪里找模板文件
r.LoadHTMLGlob("templates/*")
r.GET("/", controller.IndexHandler)
// v1
v1Group := r.Group("v1")
{
// 待办事项
// 添加
v1Group.POST("/todo", controller.CreateTodo)
// 查看所有的待办事项
v1Group.GET("/todo", controller.GetTodoList)
// 修改某一个待办事项
v1Group.PUT("/todo/:id", controller.UpdateATodo)
// 删除某一个待办事项
v1Group.DELETE("/todo/:id", controller.DeleteATodo)
}
return r
}上面是路由
下面是控制器:
func IndexHandler(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
}
func CreateTodo(c *gin.Context) {
// 前端页面填写待办事项 点击提交 会发请求到这里
// 1. 从请求中把数据拿出来
var todo models.Todo
c.BindJSON(&todo)
// 2. 存入数据库
err:=models.CreateATodo(&todo)
if err != nil{
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else{
c.JSON(http.StatusOK, todo)
//c.JSON(http.StatusOK, gin.H{
// "code": 2000,
// "msg": "success",
// "data": todo,
//})
}
}
func GetTodoList(c *gin.Context) {
// 查询todo这个表里的所有数据
todoList, err := models.GetAllTodo()
if err!= nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else {
c.JSON(http.StatusOK, todoList)
}
}
func UpdateATodo(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
return
}
todo, err := models.GetATodo(id)
if err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
return
}
c.BindJSON(&todo)
if err = models.UpdateATodo(todo); err!= nil{
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else{
c.JSON(http.StatusOK, todo)
}
}
func DeleteATodo(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
return
}
if err := models.DeleteATodo(id);err!=nil{
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else{
c.JSON(http.StatusOK, gin.H{id:"deleted"})
}
}
页:
[1]