Go 语言中的接口就是一组方法的签名,它是 Go 语言的重要组成部分。
//定义一个会员接口 type PlanMember interface { Join() JoinResponse Activate() ActivateResponse } //定义接口方法的返回值 type JoinResponse struct { Code int64 Message string } type ActivateResponse struct { Code int64 Message string MemberNo int64 } //实现这两个接口的结构体 type PlanMemberRequest struct { MemberNo int64 UserId int64 }
//实现加入的方法 func (member *PlanMemberRequest) Join() JoinResponse { fmt.Println("会员卡号:", member.MemberNo, "加入成功") reply := JoinResponse{ Code: 0, Message: "success", } return reply } //实现激活的方法 func (member *PlanMemberRequest) Activate() ActivateResponse { fmt.Println("会员卡号:", member.MemberNo, "激活成功") reply := ActivateResponse{ Code: 0, Message: "success", MemberNo: member.MemberNo, } return reply } func main() { //req := PlanMemberRequest{1688, 12306} //实现接口 //首先要定义这个接口 var pInterface PlanMember //然后定一个这个接口的入参 pInterface = &PlanMemberRequest{1233, 444} //调用接口里面得方法 result := pInterface.Join() fmt.Println("result", result) res := pInterface.Activate() fmt.Println("res", res) //另外一种实现方式 rrr := PlanMember(&PlanMemberRequest{111, 222}).Join() fmt.Println("rrr", rrr) var s *testStruct fmt.Println("s-type", s, reflect.TypeOf(s), s == nil) nilOrNot(s) } //Go语言的两种接口 iface eface //Go 语言使用 iface 结构体表示第一种接口,使用 eface 结构体表示第二种空接口,两种接口虽然都使用 interface 声明,但是由于后者在 Go 语言中非常常见,所以在实现时使用了特殊的类型。 //Go 语言的接口类型不是任意类型 例如 type testStruct struct{} func nilOrNot(v interface{}) bool { //当参数v接收到值为nil的结构体testStruct之后 v其实跟testStruct已经不是同一种数据类型了 fmt.Println("s-type-interface", v, reflect.TypeOf(v), v == nil) return v == nil }
原文:https://www.cnblogs.com/makangkang/p/14084706.html