首页 > 其他 > 详细

golang 接口学习

时间:2020-12-04 11:44:54      阅读:25      评论:0      收藏:0      [点我收藏+]
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
}

 

 

 

golang 接口学习

原文:https://www.cnblogs.com/makangkang/p/14084706.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!