分享
  1. 首页
  2. 文章

golang基础--strcut结构体

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

  • 结构体struct类似python语言中的类class,结构体类的元素可以是一个变量,或者函数或者其它的类型,好比python的属性和方法。

    // struct结构体,类似python语言中的class类
    package main
    import "fmt"
    type person struct { //定义一个strcut
     Name string
     Age int
    }
    func main() {
     a := person{} //赋值给一个变量a
     fmt.Println(a)
     a.Name = "faily" //为结构体赋值
     a.Age = 28
     fmt.Println(a)
    }
    /*输出结果
     { 0} //空结构体时,int元素为0
    {faily 28}
    */
  • 简单的方式进行结构体的初始化

    package main
    import "fmt"
    type person struct { //定义一个strcut
     Name string
     Age int
    }
    func main() {
     a := person{ //也可以这样初始化一个结构体
     Name: "msy",
     Age: 27,
     }
     fmt.Println(a)
    }
  • struct也是一个值类型,也就是说传递的时候,拷贝的是值,正常途径无法改变结构内的值,需通过指针的方式进行修改

    package main
    import "fmt"
    type person struct { //定义一个strcut
     Name string
     Age int
    }
    func main() {
     a := person{ //初始化结构体
     Name: "msy",
     Age: 27,
     }
     fmt.Println("1", a)
     A(a)
     fmt.Println("3", a)
     B(&a) //指针引用
     fmt.Println("4", a)
    }
    func A(per person) { // 参数引用person--结构体
     per.Age = 13 //初始化person属性的值
     fmt.Println("2", per)
    }
    func B(per *person){ //传递指针
     per.Age =13
     fmt.Println("2",per)
    }
    /*输出
    初始化: 1 {msy 27}
    修改A: 2 {msy 13}
    修改失败: 3'{msy 27}
    修改B: 2 {msy 13}
    修改成功: 3"{msy 13} 
    */
  • 推荐结构体初始化时,使用结构体指针,修改的时候更加方便

    package main
    import "fmt"
    type person struct { //定义一个strcut
     Name string
     Age int
    }
    func main() {
     a := &person{ //初始化结构体,建议使用结构的指针
     Name: "msy",
     Age: 27,
     }
     a.Name = "MYF" //这种方式就可以直接修改结构体
     fmt.Println("1", a)
     A(a) //此时就可以直接修改结构体
     B(a)
     fmt.Println("3", a)
    }
    func A(per *person) { //传递指针
     per.Age = 13 //初始化person属性的值
     fmt.Println("2", per)
    }
    func B(per *person) { //传递指针
     per.Age = 100
     fmt.Println("2", per)
    }
    /*输出
    1 &{MYF 27}
    2 &{MYF 13}
    2 &{MYF 100}
    3 &{MYF 100}
    */
  • 匿名结构:没有名字的结构

    package main
    import "fmt"
    func main() {
     a := &struct { //指向结构体指针
     Name string
     Age int
     }{ //直接初始化
     Name: "moshaoying",
     Age: 27,
     } 
     fmt。Println(a)
    }
    /*输出
    &{moshaoying 27}
    */
  • 嵌套匿名结构体,初始化方式

    package main
    import "fmt"
    type person struct { //嵌套匿名结构
     Name string
     Age int
     Content struct {
     Phone int
     Addr string
     }
    }
    func main() {
     a := person{Name: "moshaoying", Age: 22}
     a.Content.Phone = 13636269334 //嵌套匿名结构体初始化方式
     a.Content.Addr = "shanxi,xian"
     fmt.Println(a)
    }
    /*输出
    {moshaoying 22 {13636269334 shanxi,xian}}
    */
  • 结构体比较: 命名是结构体的一部分,所以只有当结构体命名相同时才可以进行比较

    package main
    import "fmt"
    type person struct { //嵌套匿名结构
     Name string
     Age int
    }
    type person1 struct {
     Name string
     Age int
    }
    func main() {
     a := person{Name: "moshaoying", Age: 22}
     b := person1{Name: "moshaoying", Age: 22}
     c := person{Name: "moshaoying", Age: 22}
     d : = person{Name: "moshaoying", Age: 21}
     fmt.Println(a == b)
     fmt.Println(a == c)
     fmt.Println(a == d)
    }
    /*输出报错
    a=b invalid operation: a == b (mismatched types person and person1)
    a=c true
    a=d false
    */
  • 结构体没有python类的继承,但是结构体也会有类似的功能,结构体嵌套,达到继承其它结构体的属性

    package main
    import "fmt"
    type human struct {
     Sex int
    }
    type person struct { //结构体继承(嵌套)
     human
     Name string
     Age int
    }
    func main() {
     a := person{Name: "failymao", Age: 22, human: human{Sex: 250}} //第一种方式,注意原理
     fmt.Println(a)
     //第二种方式
     a.Name = "allen"
     a.Age = 29
     a.Sex = 222
     fmt.Println(a)
    }
    /*输出报错
    第一种方式: {{250} failymao 22}
    第二种方式: {{222} allen 29}
    */

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

本文来自:博客园

感谢作者:failymao

查看原文:golang基础--strcut结构体

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏