Go 中的自动类型断言

拿这个代码示例(操场):


package main


import (

  "fmt"

)


type Foo struct {

  Name string

}


var data = make(map[string]interface{})


func main() {

  data["foo"] = &Foo{"John"}


  foo := data["foo"].(*Foo)


  fmt.Println(foo.Name)

}

当我向 中添加一些东西时data,类型变成了interface{},所以当我稍后检索该值时,我必须将原始类型声明回它。例如,有没有办法定义一个 getter 函数来data自动断言类型?


守着一只汪
浏览 303回答 2
2回答

饮歌长啸

不是真的,除非你转向reflect并尝试以这种方式获取接口的类型。但是惯用的(和更快的)方式仍然是类型断言(必须在运行时检查的“类型转换”,因为data只包含interface{}值)。如果数据要引用特定接口(而不是通用接口interface{}),就像我在这里提到的那样,那么您可以使用Name()直接在其上定义的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go