结构体基本使用

结构体基本使用

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
}

 

posted @ 2018-11-07 01:10  Atm_fan  阅读(336)  评论(0)    收藏  举报

12131313131