golang接口细节和注意事项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package main
 
import "fmt"
 
/*
    interface类型可以定义一组方法,但是这些不需要实现
    并且interface不能包含任何变量
    到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来
 
    基本语法
    type 接口名 interface{
        method1(参数列表)返回值列表
        method2(参数列表)返回值列表
    }
    func(t 自定义类型)method1(参数列表)返回值列表{
        //方法实现
    }
    func(t 自定义类型)method2(参数列表)返回值列表{
        //方法实现
    }
 
    接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想
    Golang中的接口不需要显示的实现,只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口
*/
/*
    注意事项
    1.接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量
    2.接口中所有的方法都没有方法体,即都是没有实现的方法
    3.在golang中一个自定义类型需将某个接口的所有方法都实现,我们说这个自定义类型实现了该接口
    4.只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型
    5.一个自定义类型可以实现多个接口
    6.Golang接口中不能有任何变量
    7.一个接口A可以继承多个别的接口BC,这时如果要实现A接口,也必须将BC接口的方法全部实现
    8.interface类型默认是一个指针(),如果没有对interface初始化就使用,那么会输出nil
    9.空接口interface{}没有任何方法,所以所有类型都实现了空接口,可以把任何一个变量赋给空接口
*/
type AInterface interface {
    Say()
} //定义A接口
type BInterface interface {
    Hello()
} //定义B接口
type Stu struct {
    Name string
}
 
func (stu Stu) Say() {
    fmt.Println("Stu Say()")
}
 
type integer int
 
func (i integer) Say() {
    fmt.Println("integer Say i=", i)
}
 
type Monster struct {
}
 
func (monster Monster) Hello() {
    fmt.Println("Monster Hello()")
}
func (monster Monster) Say() {
    fmt.Println("Monster Say()")
}
 
type employ interface {
} //空接口
 
func main() {
 
    var stu Stu //结构体变量,实现了Say() 实现了AInterface
    var a AInterface = stu
    a.Say()
 
    var i integer = 10
    var b AInterface = i
    b.Say()
 
    //Monster实现了AInterface和BInterface
    var monster Monster
    var a2 AInterface = monster
    var b2 BInterface = monster
    a2.Say()
    b2.Hello()
 
    //任何变量都可以赋给空接口
    var em employ = stu
    fmt.Println(em)
    var num1 float64 = 8.8
    em = num1
    fmt.Println(em)
}

  


__EOF__

本文作者StarGazer
本文链接https://www.cnblogs.com/PatrickStarGazer/p/15990127.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Star_Gazer  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示