要一直走下去

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

//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

posted on 2020-07-02 10:45  要一直走下去  阅读(1246)  评论(0编辑  收藏  举报