这段golang 你怎么看?

纯讨论,逻辑判断全部goto而不是用common func(传入http上下文) 来解决
你怎么看?

    var (
        id   = c.Param("id")
        head = c.PostForm("head")
        name = c.PostForm("name")
        sex  = c.PostForm("sex")
    )

    if id == "" {
        c.JSON(200, gin.H{
            "code": 4000,
            "msg":  "user id is not exist",
        })
        return
    }

    nameByte := []byte(name)
    for _, ch := range nameByte {
        switch {
        case ch > '~':
            fallthrough
        case ch == '\r':
            fallthrough
        case ch == '\n':
            fallthrough
        case ch == '\t':
            fallthrough
        case ch < ' ':
            goto nameError
        }
    }
    name = strings.Replace(name, " ", "", -1)
    if len(name) == 0 {
        goto nameError
    } else {
        goto nameContinue
    }

nameError:
    c.JSON(200, gin.H{
        "code": 4001,
        "msg":  "昵称不合法",
    })
    return

nameContinue:

    if len(sex) != 1 {
        c.JSON(200, gin.H{
            "code": 4002,
            "msg":  "性别格式不合法",
        })
    }
阅读 2.7k
4 个回答

不建议在这种场景下使用goto

  1. nameError那段完全可以用一个func调用. 不用考虑函数调用和地址跳转引起的性能差距.
  2. goto一般在多层循环里直接跳出外层循环

可以多出来好几行代码呢,有啥不好的

对goto不甚了解,心想如果哪天手抖忘记写 else 或 return,是不是程序就炸咯?

不过看着挺好玩的? gogogo

只要你能驾驭得了,不会范错,其实用什么方式都无所谓(目的论:实现目标即可)
一般项目中不建议,因为团队人员复杂,很容易搞砸了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题