go语言中通过例子说明:类型断言

为啥这样写会报错

package main

import "fmt"

func main() {
	var userInfo = make(map[string]interface{})
	userInfo["name"] = "张三"
	userInfo["age"] = 18
	userInfo["hobby"] = []string{"篮球", "足球"}
	fmt.Printf("第一个爱好:%v", userInfo["hobby"][0])
}

会报错;
userInfo["hobby"] 的类型是 interface{},相当于TS中的 any类型。
Go 不知道它底层其实是个 []string,
所以不能直接用 [0] 取下标。所以就会报错了

使用类型断言来解决这个问题

x.(T)
其中x是变量,T是期望的类型

package main

import "fmt"

func main() {
	var userInfo = make(map[string]interface{})
	userInfo["name"] = "张三"
	userInfo["age"] = 18
	userInfo["hobby"] = []string{"篮球", "足球"}
	// 这里使用了类型断言 x.(T); x表示变量,T表示期望的类型
	// 如果userInfo["hobby"]的类型是[]string;那么like表示[]string类型的值,ok表示类型断言是否成功
	like, ok := userInfo["hobby"].([]string)
	if ok {
		fmt.Printf("第一个爱好:%v", like[0])
	}
}
posted @ 2026-10-04 21:11  何人陪我共长生  阅读(8)  评论(0)    收藏  举报