1.结构体的定义和使用
type Person struct {
name string
age int
}
person := &Person{
"zhong",
14,
}
定义不能加逗号,使用必须加逗号
person *Person; //err
//要这样定义,必须var person *Person = ...;
//这样是用来传参时定义的
2.接口的定义和实现
type Human interface {
talk()
cry()
}//同样定义不加逗号
//实现可以用结构体,也可以用函数
type HumanStruct struct {
name string
}
func (humanStruct *HumanStruct) talk() {
fmt.Println(humanStruct.name)
}
type Humanfunc func()
func (humanfunc *Humanfunc) talk() {
}
3.接口的拦截(中间件的实现)
type Person interface {
talk()
}
type PersonStruct struct {
name string
}
func (personStruct *PersonStruct) talk() {
fmt.Println(personStruct.name)
}
type BeforePersonStruct struct {
personStruct *PersonStruct
}
func domiddlewarefunc() {
fmt.Println("实现流控,打log...")
}
func (beforePersonStruct *BeforePersonStruct) talk() {
domiddlewarefunc()
beforePersonStruct.personStruct.talk()
}
本来我们是直接时候封装好的PersonStruct就可以了,
现在我们使用BeforePersonStruct拦截talk函数,
在调用beforePersonStruct.personStruct.talk()之前做一些中间件做的事情