if-statement - golang 中的复杂条件语句

标签 if-statement go revel

我最近开始学习 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   

您可以在文档中阅读有关类型断言的更多信息:

http://golang.org/ref/spec#Type_assertions

关于if-statement - golang 中的复杂条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24110330/

相关文章:

go - 如何调试 revel 构建崩溃日志?

go - 安装 revel : undefined: config. DEFAULT_SECTION 时出错

git - 在 Heroku 上部署 revel 应用程序

c# - 处理这种逻辑的更优雅的方式

excel - 如何让 REGEXMATCH 在一系列单元格中查找多个术语,而不是查看一个单元格?

带有服务帐户的 Google Apps API 403

for-loop - 如果我将 golang 中的增量相乘,for 循环不会递增

Java 检查 zip 文件的目录

r - R中for循环和ifelse的组合

go - 在 golang 中只设置一次全局变量