You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Go代码条件判断疑问:是编译器Bug还是代码逻辑错误?

问题分析与解决

核心问题:逻辑运算符使用错误

嘿,这绝对不是编译器Bug,是你写的条件判断逻辑出问题啦!

看你这段代码里的判断:

if contentType != "image/jpeg" || contentType != "image/png" {
    return
}

这个逻辑永远都会返回true,不管contentType是什么值:

  • 如果contentType"image/jpeg",那contentType != "image/png"为真,整个||表达式结果为真,直接执行return
  • 如果contentType"image/png",那contentType != "image/jpeg"为真,同样会触发return
  • 要是其他类型,两个条件都为真,自然也会直接返回

说白了,不管用户传的是合法的jpg/png,还是其他文件,这段代码都会直接终止,后面的逻辑根本没机会执行。

正确的写法

你需要把逻辑运算符改成&&,意思是既不是jpeg也不是png的时候才返回

if contentType != "image/jpeg" && contentType != "image/png" {
    return
}

或者用更直观的方式,先定义允许的类型集合再判断:

allowedTypes := map[string]bool{
    "image/jpeg": true,
    "image/png":  true,
}
if !allowedTypes[contentType] {
    return
}

当然你原来的else if写法是没问题的,因为它是互斥判断,只会在类型不是jpeg的时候再检查是不是png,逻辑是通顺的。

小提醒

虽然你为了简洁去掉了错误处理,但实际开发里可不能这么干哦!FormFileOpenRead这些操作都可能抛出错误,忽略它们会埋下不少隐患。

内容的提问来源于stack exchange,提问作者jayD

火山引擎 最新活动