登录
首页 >  Golang >  Go问答

Difference between map[string]interface{} and interface{}

来源:Golang技术栈

时间:2023-04-14 21:20:53 227浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《Difference between map[string]interface{} and interface{}》将会介绍到golang等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

I want to parse a JSON file to a map[string]interface{}:

var migrations map[string]interface{}
json.Unmarshal(raw, &migrations)

fmt.Println(migrations["create_user"])

But I modified my code to point data to interface{}:

var migrations interface{}
json.Unmarshal(raw, &migrations)

// compile wrong here
fmt.Println(migrations["create_user"])

I don't understand much about difference between map[string]interface{} and interface{} in above case.

正确答案

It is because by default you need to type assert interface{} to get the underlying value of map[string]interface{}.

As per GoLang Specification

For an expression x of interface type and a type T, the primary expression

x.(T)

asserts that x is not nil and that the value stored in x is of type T. The notation x.(T) is called a type assertion.

Also Unmarshal function requires pointer to migration of type interface{} or map[string]interface{}

var migrations interface{}
json.Unmarshal(raw, &migrations)

fmt.Println(migrations.(interface{}).(map[string]interface{})["create_user"])

Since migrations is not a map. So you cannot use its key to get the value. Interface{} don't have keys

今天关于《Difference between map[string]interface{} and interface{}》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>