package main import "fmt" // Human 定义一个名为Human的结构体 type Human struct { Name string // 姓名 Age int // 年龄 Gender string // 性别 } // Programmer 定义一个名为Programmer的结构体,该结构体将继承Human结构体 type Programmer struct { Human // 继承Human结构体【🐵:没错,就是辣麼简单粗暴~~~】 Language string // 所使用的编程语言 WorkYears float64 // 工作年限 } // Intro Human结构体的自我介绍方法 func (h *Human) Intro() { fmt.Printf("俺叫%v(%v),今年%v岁。\n", (*h).Name, (*h).Gender, (*h).Age) } // Intro Programmer结构体的自我介绍方法(重要说明:因为Programmer继承了Human,故该方法会覆盖Human的同名方法) func (p *Programmer) Intro() { fmt.Printf( "俺叫%v(%v),今年%v岁,职业是%v程序猿,工作年限%v年。\n", (*p).Name, (*p).Gender, (*p).Age, (*p).Language, (*p).WorkYears, ) } func main() { programmer := new(Programmer) (*programmer).Name = "张三" (*programmer).Age = 18 (*programmer).Gender = "男" (*programmer).Language = "PHP" (*programmer).WorkYears = 3.14 // 调用自身Intro()方法 (*programmer).Intro() // 俺叫张三(男),今年18岁,职业是PHP程序猿,工作年限3.14年。 // 调用父类Intro()方法 (*programmer).Human.Intro() // 俺叫张三(男),今年18岁。 }
package main import ( "fmt" "time" ) type MyTime struct { time.Time // 继承标准库里的time包的Time结构体 } func (mt *MyTime) Location() string { return "Asia/Shanghai" } func main() { mt := &MyTime{} // 调用自身的Location()方法 fmt.Printf("mt.Location() is %+v \n", mt.Location()) // mt.Location() is Asia/Shanghai // 调用父类的Location()方法 fmt.Printf("mt.Time.Location() is %+v \n", mt.Time.Location()) // mt.Time.Location() is UTC }
Copyright © 2024 码农人生. All Rights Reserved