×

结构struct-GOLANG

96
与子笑
2018.05.20 10:31 字数 564

golang  @amazeUI  2017-09-12 13:51:56

type person struct {

    Name string

    Age  int

}

type user struct {

    Name string

    Age  int

    Info struct { //结构体嵌套一个匿名结构体

        Phone string

        City  string

    }

}

type test struct { //声明一个匿名字段struct

    string

    int

}

type human struct {

    Sex  string

    Name string

    Age  int

}

type student struct {

    human

    Parent_phone string

}

type teacher struct {

    human   //将上面的human组合进来

    Subject string

}

func main() {

    //struct结构体

    a := person{Name: "hk"} //可以把这个struct看做成一个php对象与json对象的组合

    a.Age = 13              //可以这样用.取值和赋值

    fmt.Println(a)

    A(a)           //从这里能够看出来,这里传递过去的是一个值的拷贝,在A函数里面对这个struct的修改并不会影响到a

    fmt.Println(a) //如果加&符号,则是引用传递,修改就会改变原有的值

    b := struct {  //匿名结构体

        Name string

        Age  int

    }{ //在声明struct的同时,可以声明值

        Name: "pp",

        Age:  11, //这里结尾必须要加上逗号

    }

    fmt.Println(b)

    c := user{Name: "pys", Age: 14} //第一层可以这样给结构体内的字段赋值

    c.Info.Phone = "iphone4s"       //匿名结构体只能勇敢这种方式给赋值

    c.Info.City = "shanghai"

    fmt.Println(c)

    d := test{"test", 4} //匿名字段结构体直接按照声明字段顺序赋值

    var e test

    e = d //同个struct可以直接赋值,非同个struct不可以进行比较

    fmt.Println(d == e)

    //golang之中没有面向对象,但是可以通过一些特性实现一些面向对象的特性例如继承,在go里面叫包含

    //上面声明了三个结构,human,studen,teacher,按面向对象来做的话,他们都需要继承human,因为

    //human里的属性包含了一个人最基本的属性,但是学生和老师又不一样

    t1 := teacher{Subject: "语文", human: human{Sex: "男"}} //对于有组合的结构体来说

    //这个human只是一个字段,后一个human才代表human这个结构体,所以可以这样赋值

    t1.Age = 15 //因为是组合过来的,所以也可以这样赋值

    fmt.Println(t1)

}

func A(per person) {

    per.Age = 19

    fmt.Println(per)

}

PHP01.COM
Web note ad 1