结构体基本使用
结构体基本使用
package main import "fmt" func main() { //顺序初始化,每个成员必须赋值 var student = Student{"fan", 20, 'm'} fmt.Println("student = ", student) //指定成员初始化,没有初始化的成员,自动赋值为0 student1 := Student{name: "fan", age: 20} fmt.Println("student1 = ", student1) //通过new函数创建Student, new函数返回一个指针 student2 := new(Student) student2.name = "张三" student2.age = 20 fmt.Println("student2 = ", student2) (*student2).age = 30 fmt.Println("student2 = ", student2) //结构体比较 var student3 = Student{"张三", 20, 'm'} var student4 = Student{"张三", 20, 'm'} fmt.Println("student3 == student4 : ", student3 == student4) //结构体做函数参数:值传递 var student5 = Student{"张三", 20, 'm'} valuePropagation(student5) fmt.Println("值传递:student = ", student5) reference(&student5) fmt.Println("引用传递:student = ", student5) } type Student struct { name string age int sex byte } //值传递 func valuePropagation(student Student) { student.name = "李四" //fmt.Println("值传递: student5 = ", student) } //引用传递 func reference(p *Student) { p.name = "李四" }
结构体匿名字段(实现继承)
package main import "fmt" func main() { //顺序初始化 var teacher = Teacher{Person{"张三", 20}, "逸夫小学"} fmt.Println("teacher = ", teacher) fmt.Printf("详细teacher = %+v\n", teacher) //指定成员初始化 teacher1 := Teacher{Person: Person{name: "李四"}, school: "未来中学"} fmt.Printf("详细teacher1 = %+v\n", teacher1) //成员操作 teacher1.name = "王五" fmt.Printf("详细teacher1 = %+v", teacher1) //存在同名成员变量 赋值按照就近原则 } type Person struct { name string age int } type Teacher struct { Person //匿名字段只有类型,继承了Person成员 school string }

浙公网安备 33010602011771号