Golang Go语言中 interface 问题

发布于 1周前 作者 eggper 来自 Go语言

Golang Go语言中 interface 问题

调用方法返回值是一个 interface,为什么取不到里面的字段

type error interface {
	Error() string
}

调用和返回如下图,返回值 err 是下面 debug 里面的 vErr Screenshot_1.png


更多关于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的一些关键点的解答:

  1. 定义与实现

    • interface通过type关键字定义,里面可以包含一组方法签名,但不包含方法的实现。
    • 一个类型只要实现了interface中的所有方法,它就隐式地实现了该interface,而无需显式声明。
  2. 用途

    • interface常用于实现多态,使得函数可以接受多种类型的参数,只要这些类型实现了特定的interface。
    • 它们也用于解耦代码,提高代码的灵活性和可测试性。
  3. 空interface

    • 空interface(interface{})不包含任何方法,因此所有类型都隐式地实现了空interface。
    • 空interface常用于编写能够处理任意类型值的函数,如fmt.Printjson.Marshal
  4. 类型断言与类型选择

    • 使用类型断言(x.(T))可以将interface类型的变量转换为具体类型。
    • 类型选择(switch v := x.(type))允许你根据interface变量的实际类型执行不同的代码路径。
  5. 注意事项

    • 不要过度使用interface,以免损失性能或使代码难以理解。
    • 在设计接口时,应关注其职责单一性,避免创建过于庞大或复杂的接口。

希望这些解答能帮助你更好地理解Go语言中的interface。如果有更具体的问题或场景,欢迎继续提问!

回到顶部