Go:对于map [string] interface {},cast类型无法映射[string]字符串

时间:2014-07-04 19:40:32

标签: casting go

我不确定为什么以下投射不起作用:

import "fmt"

func main() {
    v := map[string]interface{}{"hello": "world"}
    checkCast(v)

}

func checkCast(v interface{}) {
    _, isCorrectType := v.(map[string]string)
    if !isCorrectType { 
        fmt.Printf("incorrect type")  <------------- why does it enter this if statement?
        return
    }
}

1 个答案:

答案 0 :(得分:6)


map[string]interface{}map[string]string不同。类型interface{}与类型string不同。

如果他们都是map[string]string

package main

import "fmt"

func main() {
    v := map[string]string{"hello": "world"}
    checkCast(v)

}

func checkCast(v interface{}) {
    _, isCorrectType := v.(map[string]string)
    if !isCorrectType {
        fmt.Printf("incorrect type")
        return
    }
}

输出:

[no output]

语句v.(map[string]string)是一个类型断言,而不是强制转换。

  

The Go Programming Language Specification

     

Type assertions

     

对于接口类型的表达式x和类型T,主要表达式   表达

x.(T)
     

断言x不是nil,并且x中存储的值是   输入T。符号x.(T)称为类型断言。


Go有转换。

  

The Go Programming Language Specification

     

Conversions

     

转化是T(x)形式的表达式,其中T是一种类型   x是一个可以转换为T类型的表达式。