作者回复: 👍
作者回复: 慢慢来。
作者回复: 可以这样理解: i = int64(13) v2, ok := i.(MyInterface) // 由于i的动态类型是int64,所以这行类型断言失败。那么v2虽然静态类型为MyInterface,但其动态类型的值为nil。 而fmt.Printf结合T%输出的是接口类型变量的动态类型的类型信息,所以输出nil。
作者回复: 大大的👍
作者回复: 我个人用vim编辑器,目前还没找到什么好插件可以搜索到某个接口的所有实现类型。不知道其他编辑器,比如vscode、goland是否有这类功能。 一个比较粗糙的方法就是:先修改接口,然后编译一遍程序,根据go compiler提供的error信息找到那些实现类型,然后逐一改之(手动允悲)。
作者回复: 文中的“隐式”更多是因为接口与Go语言其他部分是正交的关系,建议先看完第30讲。
作者回复: error这个接口是特殊的。它是Go预定义的接口,可以不用考虑导出不导出,在哪里都可以使用。 但是我们自定义的接口类型,如果要在包外访问,则必须是头母大写的导出标识符。
作者回复: 这个值好像是该函数在栈帧(stack frame)中的相对位置。
作者回复: 👍。
作者回复: 👍