if-statement - 为什么在 "if"语句中使用语句?

标签 if-statement go

Go tour显示了一个示例,其中他们在与“if”语句相同的行中有一个额外的语句,他们这样解释:if 语句可以以在条件之前执行的短语句开始。

func pow(x, n, lim float64) float64 {
    if v := math.Pow(x, n); v < lim {
        return v
    }
    return lim
}

我不认为需要这种语法,而且觉得它很困惑。为什么不在上一行写 v := math.Pow(x, n)

我问的原因是,对于我所发现的,语法是经过仔细考虑后进入 Go 语言的,似乎没有什么是一时兴起的。

我想我的实际问题是:他们试图通过使用这种语法来解决什么具体问题?通过使用它,您有什么以前没有的收获?

最佳答案

有很多用例,我不认为这个功能可以解决特定问题,而是对您在使用 Go 编写代码时遇到的一些问题的实用解决方案。语法背后的基本意图是:

  • 适当的范围:只给一个变量它需要的范围
  • 正确的语义:明确变量只属于代码的特定条件部分

我记得的一些例子:

有限范围:

if v := computeStuff(); v == expectedResult {
    return v
} else {
    // v is valid here as well
}

// carry on without bothering about v

错误检查:

if perr, ok := err.(*os.PathError); ok {
    // handle path error specifically
}

或更一般的类型检查:

if someStruct, ok := someInterface.(*SomeStruct); ok {
    // someInterface is actually a *SomeStruct.
}

map 中的关键检查:

if _, ok := myMap[someKey]; ok {
    // key exists
}

关于if-statement - 为什么在 "if"语句中使用语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24317951/

相关文章:

java - 我应该使用 try/catch 吗?

Python 在循环中支持 `else`。 Ruby 中是否有类似的功能?

dictionary - 如何在实际 map 中转换字符串 "key:value"?

go - 如何使用 go-playground/validator 编写蛇形案例绑定(bind)标签?

java - If 语句在字符串搜索中不起作用

python - dict 格式键错误 '0'

javascript - jQuery if 语句中的多个条件

networking - golang : how to release a net. 来自 bfio.Reader 的 Conn

Golang Float64 位

string - 如何将多个字符串和int合并成一个字符串