这篇文章主要讲解了“Golang中的interface怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的interface怎么使用”吧!
万能类型interface
Javagolanginterfacegolangpackage main
import (
"fmt"
"math"
)
type I interface {
M()
}
type T struct {
S string
}
func (t *T) M() {
fmt.Println(t.S)
}
type F float64
func (f F) M() {
fmt.Println(f)
}
func main() {
var i I
i = &T{"Hello"}
describe(i)
i.M()
i = F(math.Pi)
describe(i)
i.M()
}
func describe(i I) {
fmt.Printf("(%v, %T)\n", i, i)
}在上面的代码当中定义了一个叫做describe的方法,在这个方法当中我们输出了两个值,一个是接口i对应的值,另一个是接口i的类型。
interfaceinterfacevar a1 interface{} = 1
var a2 interface{} = "abc"
list := make([]interface{}, 0)
list = append(list, a1)
list = append(list, a2)
fmt.Println(list)interface{}sliceinterface{}interfaceinterfaceinteface{}interfaceinterfaceinterfaceinterfaceinterface.(type)mapkeyboolif v, ok := a1.(int); ok {
fmt.Println(v)
}switchswitch v := i.(type) {
case int:
fmt.Println("int")
case string:
fmt.Println("string")
}空值nil
interfacenilPythonNoneJavaNullPointerMethodErrorgolangnilinterfacetype T struct {
S string
}
func (t *T) M() {
fmt.Println(t.S)
}
func main() {
var i I
var t *T
i = t
i.M()
}titnilinilnilMMtStnilinvalid memory address or nil pointer derefernceMttnilMfunc (t *T) M() {
if t == nil {
fmt.Println("nil")
return
}
fmt.Println(t.S)
}nilnil赋值的类型选择
golanginterfaceinterfaceinterface这看起来没有问题,但是在实际执行的时候仍然会有一点点小小的问题。比如说我们有这样一段代码:
type Integer int
type Operation interface {
Less(b Integer) bool
Add(b Integer)
}
func (a Integer) Less(b Integer) bool {
return a < b
}
func (a *Integer) Add(b Integer) {
*a += b
}OperationinterfaceIntegerLessAddLessIntegerAddIntegerOperationinterfacevar a Integer = 1 var b Operation = &a var b Operation = a
golangLessfunc (a *Integer) Less(b Integer) bool{
return (*a).Less(b)
}那反过来行不行呢?我们也写出代码:
func (a Integer) Add (b Integer) {
(&a).Add(b)
}Addagolang感谢各位的阅读,以上就是“Golang中的interface怎么使用”的内容了,经过本文的学习后,相信大家对Golang中的interface怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!