结构体
type 名称 struct {
属性名 属性类型
...
}
type Person struct {
name string
age int
}
func main() {
var p1 = Person{
name: "joshua",
age: 18,
}
fmt.Printf("%+v\n", p1)
}
// {name:joshua age:18}
方法封装
写方法时标识结构体
func (参数 结构体) 函数名([参数 参数类型]) [返回值 返回值类型] {
函数体...
}
type Person struct {
name string
age int
}
func (self *Person) set_age(age int) {
self.age = age
}
func main() {
var p = Person{
name: "joshua",
age: 18,
}
fmt.Println(p.age)
p.set_age(19)
fmt.Println(p.age)
}
// 18
// 19
内嵌(继承)
type Student struct {
name string
age int
}
type HighSchoolStudent struct {
Student // 内嵌Student结构体
side string
}
func main() {
var stu = Student{
name: "joshua",
age: 18,
}
var high_school_student = HighSchoolStudent{
side: "理科",
Student: stu,
}
fmt.Printf("%+v\n", high_school_student)
fmt.Println(high_school_student.name)
}
// {Student:{name:joshua age:18} side:理科}
// joshua
接口(多态)
① 构建接口
type 名字 interface {
...
}
② 结构体必须封装接口的所有方法
③ 将结构体地址赋值给接口类型的变量
type Name interface { // 构建接口
print_name() // 结构体必须封装接口的所有方法
}
type Student struct {
name string
}
func (self Student) print_name() { // 封装接口方法
fmt.Println(self.name)
}
func main() {
var stu = Student{
name: "joshua",
}
var name Name = &stu // 将结构体地址赋值给接口类型的变量
name.print_name()
}
// joshua