zoukankan      html  css  js  c++  java
  • 6. Go 语言中结构体的使用

    1. 结构体的定义格式

    在go语言中结果的定义格式如下:

    1
    2
    3
    type structName struct {
    filedList
    }

    列子如下:

    1
    2
    3
    4
    type Person struct {
    Name string
    age int
    }

    对上上述这种方式定义的结构体有如下几种初始化的方式

    • 默认的方式, 这种方式也是零值初始化方式

      1
      p := Person{}
    • 使用字面量进行初始化

      1
      2
      p := Person{"Joe", 19} // 注意此时必须按照顺序初始化
      pp := Person{age: 19, Name: "Joe"} // 指定fieldname方式赋值,不用按照顺序

    2. 匿名结构体的使用

    对于匿名结构体,可以在初始化变量的时定义,如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    func main() {
    user := struct {
    Name string
    Age int
    } {Name: "joe", Age: 19 }

    fmt.Println(user)
    }


    user := struct {
    Name string
    Age int
    }{"jor", 10}

    同样在定义结构体时,也可以使用匿名结构体, 如下:

    1
    2
    3
    4
    5
    6
    7
    8
    type User struct {
    Name string
    Age int
    Content struct { // 匿名结构体
    Tel string
    Email string
    }
    }

    对于在结构体中的匿名结构体,在初始化的时候,需要如下操作:

    1
    2
    3
    4
    5
    6
    7
    func main(){
    user := {Name: 大专栏  6. Go 语言中结构体的使用"joe", Age: 10}

    // 对于结构体中的匿名结构体只能这样初始化
    user.Content.Tel = "12306"
    user.Content.Email = "214639811@qq.com"
    }

    注意:在GO中结构体,就是某些字段的集合,是值类型的,可以进行 ==比较的,注意必须是相同类型的结构体。

    3. 结构体中的匿名字段

    结构体中的匿名字段,可以是GO语言内置的,也可以是自定义的类型。GO内置的类型,例子如下:

    1
    2
    3
    4
    type Person struct{
    string
    int
    }

    对于这种结构体,必须按照顺序进行初始化。

    1
    2
    3
    4
    func main() {
    p := Person{"joe", 10}
    fmt.Println(p)
    }

    在go中没有继承机制,自定义类型的匿名字段在go中叫做组合继承,如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    type human struct{
    Sex string
    }

    type Person struct{
    human // 注意:匿名字段,类型名和字段名是一致的
    Name string
    Age int
    }

    对于这种结构体的初始化,按照顺序初始化,如下

    1
    2
    3
    4
    func main() {
    p := Person{human{Sex: "f"}, "joe", 20}
    fmt.Println(p)
    }

    指定字段名进行初始化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    func main() {
    p := Person{Name: "joe", Age: 10, human: human{Sex: "f"}}
    p := Person{Name: "joe", Age: 10, human: human{Sex: "f"}}

    // 注意: 对于结构体中的匿名字段,在组合的时候,将所有的字段给了结构体
    p.Sex = 'm'
    p.human.Sex = 'f' // 这两种方式都可以访问。
    }
    // 这里就一个知识点,匿名字段的类型名和字段名称一致。

    对于结构体指着的使用,就不在啰嗦了。

  • 相关阅读:
    显示和隐藏一个div的问题
    javascript高级程序设计笔记-第八章(BOM)
    javascript高级程序设计笔记-第七章(函数表达式)
    javascript高级程序设计笔记-第六章(面向对象编程)
    javascript高级程序设计笔记-第五章(引用类型)
    javascript高级程序设计笔记-第四章(变量、作用域)
    javascript高级程序设计笔记-第三章(基本概念)
    css设计指南-笔记7
    CocoaPods 1.1.0上传遇到swift问题
    Attribute富文本使用方法
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12041221.html
Copyright © 2011-2022 走看看