Golang 结构体

邦_ · · 967 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


package main

import "fmt"

type Person struct {
    name string
    age  int
    sex  string
}

func main() {

    //方法一
    var p1 Person
    p1.name = "张三"
    p1.age = 18
    p1.sex = "男"
    fmt.Println(p1)

    //方法二
    p2 := Person{
        name: "李四",
        age:  22,
        sex:  "女",
    }
    fmt.Println(p2)

    //方法三
    p3 := new(Person)
    p3.sex = "男"
    p3.name = "王五"
    (*p3).age = 30
    p3.age = 32 //语法糖,简化写法
    fmt.Println(p3)

    p4 := p3 // p3属于指针 地址传递  浅copy
    fmt.Println(&p3)
    fmt.Println(&p4)
    fmt.Println(p3.age)
    p4.age = 100
    fmt.Println(p3.age)

    p5 := p2 //相当于值传递 深copy
    fmt.Println(&p5)
    fmt.Println(&p2)
    fmt.Println(p2.age)
    p5.age = 121
    fmt.Println(p2.age)

    changeAge(p5) //值传递,深copy 改变不了原来的对象
    fmt.Println(p5.age)

    changeAge1(&p5) //地址传递 浅copy 会影响原来的对象的值
    fmt.Println(p5.age)

}

func changeAge(person Person) {

    person.age = 123

}

func changeAge1(person *Person) {

    person.age = 123

}


继承

type Person struct {
    name string
    age  int
    sex  string
    book Book
}

type Student struct {
    Person  //提升子段,学生的对象 可以直接访问Person的字段
    class  string
    number int
}


    var s1 = student{}
    s1.name = "张三"
    s1.age = 111
    s2 := Student{Person: Person{name: "1212"}, class: "1212121"}         //要指定子段名称的话
    s3 := Student{Person{"121", 121, "女", Book{"书", 12.1}}, "12121", 121} //不指定字段按顺序的话,需要初始化全部的

    fmt.Println(s2)
    fmt.Println(s3)


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:邦_

查看原文:Golang 结构体

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

967 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传