Golang中的interface怎么使用

这篇文章主要讲解了“Golang中的interface怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的interface怎么使用”吧!

万能类型interface

Javagolanginterface
golang
package 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的类型。

interface
interface
var 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{}interfaceinterface
interface
interfaceinterface.(type)mapkeybool
if v, ok := a1.(int); ok {
    fmt.Println(v)
}
switch
switch v := i.(type) {
case int:
    fmt.Println("int")
case string:
    fmt.Println("string")
}

空值nil

interfacenilPythonNoneJavaNullPointerMethodError
golangnilinterface
type 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 derefernce
MttnilM
func (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
}
OperationinterfaceIntegerLessAddLessIntegerAddInteger
Operationinterface
var a Integer = 1
var b Operation = &a
var b Operation = a
golangLess
func (a *Integer) Less(b Integer) bool{
    return (*a).Less(b)
}

那反过来行不行呢?我们也写出代码:

func (a Integer) Add (b Integer) {
    (&a).Add(b)
}
Addagolang

感谢各位的阅读,以上就是“Golang中的interface怎么使用”的内容了,经过本文的学习后,相信大家对Golang中的interface怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!