美文网首页
06-接口(interface)

06-接口(interface)

作者: 玄德公笔记 | 来源:发表于2021-11-20 20:57 被阅读0次

    1. 接口

    1.1 概念

    把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。

    1.2 定义接口

    /* 定义接口 */
    type interface_name interface {
       method_name1 [return_type]
       method_name2 [return_type]
       method_name3 [return_type]
       ...
       method_namen [return_type]
    }
    
    /* 定义结构体 */
    type struct_name struct {
       /* variables */
    }
    
    /* 实现接口方法 */
    func (struct_name_variable struct_name) method_name1() [return_type] {
       /* 方法实现 */
    }
    ...
    func (struct_name_variable struct_name) method_namen() [return_type] {
       /* 方法实现*/
    }
    

    2. 示例

    • 代码结构
      image.png

    2.1 struct_demo

    定义结构体和方法

    package struct_demo
    
    import "fmt"
    type Power struct {
        Atk int
        Def int
    }
    //定义西蜀结构体
    type Xishu struct {
        ID int
        Name string
        Age int
        Position string
        Power
    }
    //定义东吴结构体
    type Dongwu struct {
        ID int
        Name string
        Age int
        Position string
        Power
    }
    
    //定义 西蜀方法一
    func (xishu *Xishu)Infor01() string {
        fmt.Println("蜀将个人信息")
        fmt.Println("姓名: ",xishu.Name)
        fmt.Println("职务: ",xishu.Position)
        return "蜀将个人信息"
    }
    //定义 西蜀方法二
    func (xishu *Xishu)Infor02() string {
        fmt.Println("蜀将战力")
        fmt.Println("攻击力: ",xishu.Atk)
        fmt.Println("防御力: ",xishu.Def)
        return "蜀将战力"
    }
    
    
    //定义 东吴方法一
    func (dongwu *Dongwu)Infor01() string {
        fmt.Println("吴将个人信息")
        fmt.Println("姓名: ",dongwu.Name)
        fmt.Println("职务: ",dongwu.Position)
        return "吴将个人信息"
    }
    
    //定义 东吴方法二
    func (dongwu *Dongwu)Infor02() string {
        fmt.Println("吴将战力")
        fmt.Println("攻击力: ",dongwu.Atk)
        fmt.Println("防御力: ",dongwu.Def)
        return "武将战力"
    }
    

    2.2 interface_demo

    定义接口

    package interface_demo
    
    //定义一个接口
    type Behavior interface {
       Infor01() string
       Infor02() string
    }
    

    2.3 main.go

    调用方法

    package main
    
    import (
        "814/interface_demo"
        "814/struct_demo"
        "fmt"
    )
    func main () {
        //定义刘备数据
        liubei := new(struct_demo.Xishu)
        liubei.ID = 0
        liubei.Name = "刘备"
        liubei.Age = 28
        liubei.Position = "主公"
        liubei.Atk = 200
        liubei.Def = 300
    
        //定义周瑜数据
        zhouyu := new(struct_demo.Dongwu)
        zhouyu.ID = 0
        zhouyu.Name = "周瑜"
        zhouyu.Age = 20
        zhouyu.Position = "大都督"
        zhouyu.Atk = 400
        zhouyu.Def = 300
    
        //调用后边创建的"调用接口的函数",分别将刘备、周瑜数据传入
        action(liubei)
        action(zhouyu)
    }
    
    //定义一个函数,调用接口
    func action( b interface_demo.Behavior) string {
        fmt.Println("#################")
        b.Infor01()
        fmt.Println("-------------------")
        b.Infor02()
        return ""
    }
    

    2.4 运行结果

    #################
    蜀将个人信息
    姓名:  刘备
    职务:  主公
    -------------------
    蜀将战力
    攻击力:  200
    防御力:  300
    #################
    吴将个人信息
    姓名:  周瑜
    职务:  大都督
    -------------------
    吴将战力
    攻击力:  400
    防御力:  300
    
    Process finished with the exit code 0
    

    相关文章

      网友评论

          本文标题:06-接口(interface)

          本文链接:https://www.haomeiwen.com/subject/tynvzltx.html