golang语法中的“ i。(string)”实际上是什么意思?

Dak*_*ani 3 syntax functional-programming go

我最近开始寻找功能性的go示例,并发现了以下功能:

mapper := func (i interface{}) interface{} {
    return strings.ToUpper(i.(string))
}
Map(mapper, New(“milu”, “rantanplan”))
//[“MILU”, “RANTANPLAN”]
Run Code Online (Sandbox Code Playgroud)

现在在此函数中,您可以看到returnmapper 的值是: strings.ToUpper(i.(string))

但是,这种i.(string)语法是什么意思?我尝试搜索,但没有发现任何特别有用的信息。

poy*_*poy 5

i.(string)将(或至少尝试)i(type interface{})强制转换为type string。我说尝试是因为说i是对的int,这会惊慌。如果这听起来不太好,则可以将语法更改为

x, ok := i.(string)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果i不是string,则代码okfalse,而代码不会慌乱。