Golang Go语言中 interface 问题
Golang Go语言中 interface 问题
调用方法返回值是一个 interface,为什么取不到里面的字段
type error interface {
Error() string
}
调用和返回如下图,返回值 err 是下面 debug 里面的 vErr
更多关于Golang Go语言中 interface 问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
7 回复
err.Error()
你是怎么得出来 .Errors 这个『东西』的??
更多关于Golang Go语言中 interface 问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
返回的是 interface,如果想用特定类型的属性,需要类型断言
噢,需要转一下类型。
err.(ValidationError)
刚刚转了,但是得到的是 false,
![Screenshot_2.png]( )
看看是不是转错了类型: *jwt.ValidationError
,已解决,感谢,需要传 *ValidationError
在Go语言中,interface是一个非常重要的概念,它提供了一种定义对象行为的方式,而不必关心对象的具体类型。以下是对Go语言中interface的一些关键点的解答:
-
定义与实现:
- interface通过type关键字定义,里面可以包含一组方法签名,但不包含方法的实现。
- 一个类型只要实现了interface中的所有方法,它就隐式地实现了该interface,而无需显式声明。
-
用途:
- interface常用于实现多态,使得函数可以接受多种类型的参数,只要这些类型实现了特定的interface。
- 它们也用于解耦代码,提高代码的灵活性和可测试性。
-
空interface:
- 空interface(
interface{}
)不包含任何方法,因此所有类型都隐式地实现了空interface。 - 空interface常用于编写能够处理任意类型值的函数,如
fmt.Print
和json.Marshal
。
- 空interface(
-
类型断言与类型选择:
- 使用类型断言(
x.(T)
)可以将interface类型的变量转换为具体类型。 - 类型选择(
switch v := x.(type)
)允许你根据interface变量的实际类型执行不同的代码路径。
- 使用类型断言(
-
注意事项:
- 不要过度使用interface,以免损失性能或使代码难以理解。
- 在设计接口时,应关注其职责单一性,避免创建过于庞大或复杂的接口。
希望这些解答能帮助你更好地理解Go语言中的interface。如果有更具体的问题或场景,欢迎继续提问!