类型Assert后的golang类型转换

hyrbngr7  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(172)

以这两段代码为例:

  1. http://play.golang.org/p/Oh6xNm2dRK
func main() {
    var media interface{}
    media = "boo"
    media = media.(string)
    fmt.Println([]byte(media))
}
  1. http://play.golang.org/p/Vd-6AGCBKQ
func main() {
    media := "boo"
    fmt.Println([]byte(media))
}

在1中,媒体首先被创建为空接口,然后类型被Assert为字符串。在2中,媒体是字符串。
两者都试图将媒体转换为字节数组,为什么会有区别?到那时它们不都是字符串吗?

mtb9vblg

mtb9vblg1#

第一个函数不改变media的类型,它已经被定义为interface{}

func main() {
    var media interface{}
    media = "boo"
    x := media.(string)
    fmt.Println([]byte(x))
}

http://play.golang.org/p/QB3ey_e3io
或者内联执行:

func main() {
    var media interface{}
    media = "boo"
    fmt.Println([]byte(media.(string)))
}

http://play.golang.org/p/RJqBJ4telB

相关问题