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

  • 相关阅读:
    c++ builder 获取命令行参数
    c++ builder 只允许程序运行一个实例
    jQuery学习笔记(三)
    jQuery学习笔记(二)
    jQuery实现一个弹出登陆层的效果
    jQuery学习笔记(一)
    20117月
    201112学习
    21125
    211211
  • 原文地址:https://www.cnblogs.com/staff/p/13223421.html
Copyright © 2011-2022 走看看