黄宽的blog

宁可十年不将军,不可一日不拱卒



结构struct

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)
}


  golang

作者  :  黄宽

不耻最后,即使慢,驰而不息,纵会落后,纵令失败



About ME

about me

黄宽

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

友情链接