Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement golang中的复杂条件语句_If Statement_Go_Revel - Fatal编程技术网

If statement golang中的复杂条件语句

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

我最近开始学习golang和Revel。我试图理解下面的if语句到底是什么意思。似乎它正在进行类型检查,但我不知道条件实现了什么。如果有人能告诉我这里发生了什么,我将不胜感激。谢谢

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)
这是不安全的:如果ever
obj
不是
字符串,程序将死机。另一个是您在代码中使用的。如果
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)