标签:分享图片 不能 否则 img func 结合 类型 一个 多个
一:接口的定义
interface类型可以定义一组方法,但这些方法不需要实现。且interface不能包含任何字段,某个自定义类型(如结构体),需要用到时再具体实现该方法。
二:简单使用举例
package main import ( "fmt" ) type itf interface{ SayHello() Plud(num1 int, num2 int) int } type Personal struct{ } func (p Personal) SayHello() { fmt.Println("hello world!") } func (p Personal) Plud(num1 int, num2 int) int{ return num1 + num2 } func main() { var p Personal p.SayHello() res := p.Plud(1, 2) fmt.Println(res) } 结果 [ `go run interface.go` | done ] hello world! 3
三:接口使用细节
①:接口本身不可以创建示例,但可以指向一个实现该接口方法的自定义的类型(如结构体)
func main() { var p Personal var pp Itf = p pp.SayHello() }
②:接口中的所有方法都没没有结构体;
③:一个自定义类型需要将接口的所有方法都实现,我们就会说该自定义类型实现了该接口;
④:一个自定义类型只有实现了某个接口,才能将该自定义类型的实例赋给接口(与③结合起来);
⑤:只要是自定义类型就可以实现接口,而不单单是结构体。
package main import ( "fmt" ) type Itf interface{ Say() } type inter int func (i inter) Say() { fmt.Printf("这是数字%v",i) } func main() { var i inter = 1 var ii Itf = i ii.Say() } 结果 [ `go run interface.go` | done ] 这是数字1
⑥:一个自定义类型可以实现多个接口
package main import ( "fmt" ) type A interface{ Say() } type B interface{ Plud() } type C struct{ } func (a C) Say() { fmt.Println("hello world!") } func (b C) Plud() { fmt.Println(1+1) } func main() { var c C var a A = c a.Say() var b B = c b.Plud() } 结果 [ `go run interface.go` | done ] hello world! 2
⑦:接口中不能有任何变量
⑧:接口也可以继承,只不过需要把所有继承的方法都要实现(包括本身的方法)
⑨:空接口interface{}可以接受任何数据类型.
func main() { var test interface{} test = 10 fmt.Println(test) test = "louis" fmt.Println(test) } 结果 [ `go run interface.go` | done ] 10 louis
⑩:interface默认为指针类型。
备注:如果要调用接口方法,则接口里的方法必须全部实现,无论该方法是否会被使用,否则报错。
标签:分享图片 不能 否则 img func 结合 类型 一个 多个
原文地址:https://www.cnblogs.com/louis181214/p/10263432.html