这篇文章主要讲解了“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怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!