zoukankan      html  css  js  c++  java
  • Go 结构体嵌套 “继承”

    嵌套结构体  嵌套匿名结构体

    //address 地址结构体
    type address struct {
      province string
      city string
    }

    //user 用户结构体
    type user struct {
      name string
      gender string
      //addr address //结构体嵌套,访问 user1.addr.city
      address //可以用匿名嵌套结构体(推荐), 访问user1.city或user1.address.city(名称冲突时用)   写成" *address " 表示指针
    }


    func main() {
      user1 := user{
        name: "小王子",
        gender: "男",
        address: address{         //  写"&address" 返回地址,上面定义时要用指针接收
          Province: "山东",
          City: "威海",
        },
      }
    }

    模拟“继承”,
    公共的属性定义在父匿名结构体中,这样在子结构体方法父结构体方法都能访问该属性

    //animal 动物
    type animal struct {
      name string
    }

    //dog 狗
    type dog struct {
      feet int8
      *animal       //通过嵌套匿名结构体实现继承,原理是animal中的字段可以通过dog对象直接访问
    }

    func (a *animal) move() {
      fmt.Printf("%s会动", a.name)
    }

    func (d *dog) wang() {
      fmt.Printf("%s会汪汪汪...", d.name)
    }

    func main() {
      d1 := &dog{
        feet: 4,
        animal: &animal{        //注意嵌套的是结构体指针
          name: "乐乐",
        },
      }
      d1.wang()    //乐乐会汪汪汪~
      d1.move()    //乐乐会动!
    }

    结构体匿名字段(知道就行,很少用)

    type Person struct {
             string //结构体匿名字段,相同类型只能有一个,默认把类型当名字 p.string
             int
    }

    11

  • 相关阅读:
    正则表达式-元字符
    利用shell脚本实现nginx 的logs日志分割
    Linux下 nfs部署
    Linux下 niginx部署
    linux 硬盘分区与格式化挂载 (二)
    linux 硬盘分区与格式化挂载
    linux 系统监控
    [LeetCode] Best Time to Buy and Sell Stock
    [LeetCode] Convert Sorted Array to Binary Search Tree
    [LeetCode] Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/staff/p/13223421.html
Copyright © 2011-2022 走看看