请选择 进入手机版 | 继续访问电脑版

两张图对比:

legs+之专栏 legs+之专栏 565 人阅读 | 5 人回复 | 2023-05-24

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x



360截图20230524194349707.jpg





学php的朋友或许会陌生,但是学Java那是刻苦铭心!
其实,在学go的时候不一定要这样分层,但是习惯了你就会觉得这样分,优雅!

回答|共 5 个

legs+

legs+ 发表于 2023-5-24 19:54:37| 字数 85 | 显示全部楼层

https://blog.csdn.net/qq_46429858/article/details/124376456


...
反正,我也闹不清楚,只是跟着做
所以,把教程奉上

legs+

legs+ 发表于 2023-5-24 20:01:19| 字数 103 | 显示全部楼层

本帖最后由 legs+ 于 2023-5-24 20:06 编辑

中间件,以前,我闹不清楚。
以前无论C#或者Java都是通过程序流程或代码来实现,后来学深了感觉还是中间件好,透过AOP(切面)更理想。
就是封装的太厉害了

legs+

legs+ 发表于 2023-5-24 20:26:31| 字数 85 | 显示全部楼层

本帖最后由 legs+ 于 2023-5-24 20:27 编辑

我看现在的一些初学者喜欢,刷题,go的题都有人刷,而且还不少
我奉劝去刷Java、c#或c++
go的题,没有啥技术含量

legs+

legs+ 发表于 2023-5-31 15:22:04| 字数 600 | 显示全部楼层

写了一个小Demo:
  1. func SetupRouter() *gin.Engine {
  2.         if setting.Conf.Release {
  3.                 gin.SetMode(gin.ReleaseMode)
  4.         }
  5.         r := gin.Default()
  6.         // 告诉gin框架模板文件引用的静态文件去哪里找
  7.         r.Static("/static", "static")
  8.         // 告诉gin框架去哪里找模板文件
  9.         r.LoadHTMLGlob("templates/*")
  10.         r.GET("/", controller.IndexHandler)

  11.         // v1
  12.         v1Group := r.Group("v1")
  13.         {
  14.                 // 待办事项
  15.                 // 添加
  16.                 v1Group.POST("/todo", controller.CreateTodo)
  17.                 // 查看所有的待办事项
  18.                 v1Group.GET("/todo", controller.GetTodoList)
  19.                 // 修改某一个待办事项
  20.                 v1Group.PUT("/todo/:id", controller.UpdateATodo)
  21.                 // 删除某一个待办事项
  22.                 v1Group.DELETE("/todo/:id", controller.DeleteATodo)
  23.         }
  24.         return r
  25. }
复制代码
上面是路由

legs+

legs+ 发表于 2023-5-31 15:23:02| 字数 1,351 | 显示全部楼层

下面是控制器:
  1. func IndexHandler(c *gin.Context) {
  2.         c.HTML(http.StatusOK, "index.html", nil)
  3. }


  4. func CreateTodo(c *gin.Context) {
  5.         // 前端页面填写待办事项 点击提交 会发请求到这里
  6.         // 1. 从请求中把数据拿出来
  7.         var todo models.Todo
  8.         c.BindJSON(&todo)
  9.         // 2. 存入数据库
  10.         err:=models.CreateATodo(&todo)
  11.         if err != nil{
  12.                 c.JSON(http.StatusOK, gin.H{"error": err.Error()})
  13.         }else{
  14.                 c.JSON(http.StatusOK, todo)
  15.                 //c.JSON(http.StatusOK, gin.H{
  16.                 //        "code": 2000,
  17.                 //        "msg": "success",
  18.                 //        "data": todo,
  19.                 //})
  20.         }
  21. }

  22. func GetTodoList(c *gin.Context) {
  23.         // 查询todo这个表里的所有数据
  24.         todoList, err := models.GetAllTodo()
  25.         if err!= nil {
  26.                 c.JSON(http.StatusOK, gin.H{"error": err.Error()})
  27.         }else {
  28.                 c.JSON(http.StatusOK, todoList)
  29.         }
  30. }

  31. func UpdateATodo(c *gin.Context) {
  32.         id, ok := c.Params.Get("id")
  33.         if !ok {
  34.                 c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
  35.                 return
  36.         }
  37.         todo, err := models.GetATodo(id)
  38.         if err != nil {
  39.                 c.JSON(http.StatusOK, gin.H{"error": err.Error()})
  40.                 return
  41.         }
  42.         c.BindJSON(&todo)
  43.         if err = models.UpdateATodo(todo); err!= nil{
  44.                 c.JSON(http.StatusOK, gin.H{"error": err.Error()})
  45.         }else{
  46.                 c.JSON(http.StatusOK, todo)
  47.         }
  48. }

  49. func DeleteATodo(c *gin.Context) {
  50.         id, ok := c.Params.Get("id")
  51.         if !ok {
  52.                 c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
  53.                 return
  54.         }
  55.         if err := models.DeleteATodo(id);err!=nil{
  56.                 c.JSON(http.StatusOK, gin.H{"error": err.Error()})
  57.         }else{
  58.                 c.JSON(http.StatusOK, gin.H{id:"deleted"})
  59.         }
  60. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐