【Golang】无法在多个赋值中将 interface{} 赋给xxx (类型 string)


在把map里的string赋值给其他结构变量的时候报错了,
中文报错:无法在多个赋值中将 interface{} 赋给 xxx (类型 string)
英文报错:Cannot assign interface{} to xxx (type string) in multiple assignment

错误的原因是因为map

type Set struct {
	Set map[string]interface{} `yaml:"setting""`
}

返回的是interface类型,需要做转换才能使用,golang提供了类型断言来实现这类转换:

t := i.(T)
这个表达式意思是接口i是T类型,并将它的值赋值给t。
如果i不是类型T,则这样写会引起panic。
 
为了防止panic,可能写成下面这样:
 
t, ok := i.(T)
如果接口i的类型是T,则ok则为true,否则为false。