golang中的复杂条件语句

bro*_*oun 3 if-statement go revel

我最近开始学习golang和Revel.我试图了解下面的if语句究竟是什么.似乎它正在进行类型检查,但我不知道条件实现了什么.感谢是否有人能告诉我这里发生了什么.谢谢

if str, ok := obj.(string); ok {
return len(str) > 0
}
Run Code Online (Sandbox Code Playgroud)

Not*_*fer 5

它试图将obj(可能是某个抽象接口)转换为字符串,检查是否有效,只有在结果好的情况下才进入.

写得更稀疏,它可以被视为:

// 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
}
Run Code Online (Sandbox Code Playgroud)

从一些界面到真实类型的安全铸造是做什么的.如果你在没有该ok部分的情况下这样做,如果obj不是一个字符串,你的程序将会惊慌失措.即如果obj不是字符串,则此代码将使程序崩溃:

str := obj.(string) 
return len(str) > 0   
Run Code Online (Sandbox Code Playgroud)

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

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