interface和struct

interface

interface指的是抽象,当函数参数限制为某一接口时,实现该接口的所有类型都可以传入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
type Person interface{
Say()
}
type Student struct{
name string
}
func (s *Student) Say(){
fmt.Println(s.name)
}
func say(p Person){
p.Say()
}
func getStudent() Person{ //&Student实现了Person 所以可以返回
return &Student{name:"xiaoming",}
}
func main(){
p:=getPerson()
say(p) //p实现了Person 可直接传入
}

struct

相同例子 struct不具有抽象概念,举个例子,即使结构体A嵌套B 但是A扔不能作为B来传入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type Person struct{
name string
}
type Student struct{
Person
class string
}
func getStudent() Student{ //这里返回值不能是Person
return Student{}
}
func say(p Person){
}
func main(){
s:=getStudent()
say(s) //报错 需要传入Person类型数据
}