我最近开始学习 golang 和 Revel。我试图理解下面的 if 语句到底做了什么。好像它正在进行类型检查,但我看不到条件实现的结果。如果有人能告诉我这里发生了什么,我将不胜感激。谢谢
if str, ok := obj.(string); ok {
return len(str) > 0
}
最佳答案
它尝试将 obj(可能是某个抽象接口(interface))转换为字符串,检查是否有效,只有在结果正常时才进入。
写得比较稀疏,可以看作是:
// do a type assertion/conversion of obj to a string.
// If obj isn't really a string, ok will be false
str, ok := obj.(string)
// this will only run if we're talking about a string
if ok {
return len(str) > 0
}
go 所做的是从一些接口(interface)到真实类型的安全转换。如果您在没有 ok
部分的情况下执行此操作,那么如果 obj 不是字符串,您的程序将会崩溃。即,如果 obj 不是字符串,此代码将使您的程序崩溃:
str := obj.(string)
return len(str) > 0
您可以在文档中阅读有关类型断言的更多信息:
关于if-statement - golang 中的复杂条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24110330/