go inferface

clipboard.png

这段代码中为什么不能改 a 的username 赋值
赋值就会报错

clipboard.png

阅读 3.3k
5 个回答

要先断言才行哦

a.(*MyStruct).username = "this is a test"

因为你的a依然是interface{}类型啊,这种类型自然没有username这个字段

之所以你可以执行a = MyStruct{},是因为所有的struct都是interface{},所以可以赋值,但赋值不意味着改变了a的类型

golang是静态语言,你把a声明为interface,他不能再声明为struct

你要在MyStruct的方法里面赋值,或者自己写一个构造函数。

a = MyStruct{}
b := a.(MyStruct)
b.username = "this"
fmt.Println(b)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题