If statement golang中的复杂条件语句
我最近开始学习golang和Revel。我试图理解下面的if语句到底是什么意思。似乎它正在进行类型检查,但我不知道条件实现了什么。如果有人能告诉我这里发生了什么,我将不胜感激。谢谢If statement golang中的复杂条件语句,if-statement,go,revel,If Statement,Go,Revel,我最近开始学习golang和Revel。我试图理解下面的if语句到底是什么意思。似乎它正在进行类型检查,但我不知道条件实现了什么。如果有人能告诉我这里发生了什么,我将不胜感激。谢谢 if str, ok := obj.(string); ok { return len(str) > 0 } 它尝试将obj(可能是某种抽象接口)转换为字符串,检查是否有效,并且仅在结果正常时输入 写得比较简略,可以看作: // do a type assertion/conversion of obj to
if str, ok := obj.(string); ok {
return len(str) > 0
}
它尝试将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
}
go所做的是从某个接口安全地转换为真实类型。如果在没有ok
部分的情况下执行此操作,则如果obj不是字符串,程序将死机。i、 e如果obj不是字符串,此代码将使程序崩溃:
str := obj.(string)
return len(str) > 0
您可以在文档中阅读有关类型断言的更多信息:
这被称为一个。您的变量obj
是一个接口{}
,换句话说,它的实际类型可以从一个执行更改为另一个执行。类型断言用于确定接口{}
的实际类型。有两种方法可以做到这一点:
str = obj.(string)
这是不安全的:如果everobj
不是字符串,程序将死机。另一个是您在代码中使用的。如果obj
不是字符串
,则ok
布尔值将为false
例如:
func f(v interface{}) {
if _, ok := v.(string); ok {
fmt.Println("v is a string!")
} else if _, ok := v.(float64); ok {
fmt.Println("v is a float64!")
} else {
fmt.Println("v is something else...")
}
}
f(17.42) // "v is a float64!"
f("foobar") // "v is a string!"
f([]string{"hello", "world"}) // "v is something else..."
啊!!有道理,感谢您的快速响应。[]接口{}
应替换为接口{}
<应使用code>str
和if
,例如fmt.Println(str)
和fmt.Println(if)
。