标签:
当你在 Go 语言中遇到错误信息 "Invalid type assertion: aa.(Ai) (non-interface type A on the left)"
时,这通常表示你在进行类型断言时,左侧的类型是一个具体的结构体类型,而不是一个接口类型。类型断言只能用于接口类型。
示例及解决方法
以下是一个示例,展示了如何正确使用类型断言:
package main
import (
"fmt"
)
// 定义一个接口
type Ai interface {
SayHello()
}
// 定义一个结构体
type A struct{}
// 实现接口的方法
func (a A) SayHello() {
fmt.Println("Hello from A!")
}
func main() {
aa := A{} // 结构体实例
var i Ai // 接口变量
i = aa // 将结构体赋值给接口变量
// 现在可以使用类型断言
if a, ok := i.(Ai); ok {
fmt.Println("aa implements Ai interface.")
a.SayHello()
} else {
fmt.Println("aa does not implement Ai interface.")
}
}
Go
关键点
-
接口与结构体: 确保类型断言的左侧是一个接口类型,而不是结构体类型。你可以将结构体赋值给接口变量,然后对接口变量进行类型断言。
-
类型断言的语法:
i.(Ai)
这语法用于检查i
这个接口变量是否持有一个实现了Ai
接口的值。 -
检查成功与否: 使用
ok
变量来判断类型断言是否成功。
标签: 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。