标签:分享图片 不能 否则 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