Golang 学习 - 结构体

  1. 结构体定义
    结构体是一种数据类型。

    // 定义类型(地位等价于 int/byte/bool/string... )
    // 通常放在全局位置
    type Person struct {
    	name string
    	sex byte
    	age int
    }
    

    注意: 结构体内不能赋初值,不能用 var 修饰。

  2. 普通变量定义和初始化

    • 顺序初始化:依次将结构体内部所有成员初始化。
      var man Person = Person{"Andy", 'm', 18}
      
    • 指定成员初始化:未初始化的成员变量,取该数据类型对应的默认值。
      man := Person{name:"rose", age:19}
      
  3. 普通变量的赋值和使用
    使用 “.” 索引成员变量。

    var man Person
    man.name = "make"
    man.sex = 'm'
    man.age = 20
    
  4. 结构体变量的比较

    • 比较:只能使用 == 和 != ,不能使用 > ,< ,>= ,<= …
    • 相同结构体类型(成员变量的类型、个数、顺序一致)变量之间可以直接赋值。
  5. 结构体地址
    结构体变量的地址 == 结构体首个元素的地址

  6. 结构体传参
    将结构体变量的值拷贝一份传递。(几乎不用,因为内存消耗大,效率低)

    // 获取某种类型的变量所占用的内存空间的大小
    unSafe.Sizeof(变量名)
    
  7. 指针变量的定义和初始化

    • 顺序初始化:依次将结构体内部所有成员初始化。

      var man *Person = &Person{"Andy", 'm', 18}
      
    • new() 函数

      	p := new(Person)
      	p.name = "lisa"
      	p.age = 20
      
  8. 指针变量的赋值和使用(与普通变量相同)
    使用 “.” 索引成员变量。

    var man Person
    man.name = "make"
    man.sex = 'm'
    man.age = 20
    
  9. 结构体指针地址
    结构体指针变量的值 == 结构体首个元素的地址

  10. 结构体指针传参
    将结构体变量地址值传递(传引用)。(使用频率比较高)

    // 不管何种类型的指针,在 64 位操作系统下,大小一致,均为 8 字节!!!
    unSafe.Sizeof(指针)
    
  11. 结构体指针做函数返回值

    • 不能返回局部变量的地址。(原因:局部变量保存在栈帧上,函数调用结束后,栈帧释放。局部变量的地址,不再受系统保护,随时可能分配给其他程序。)
    • 可以返回局部变量的值。

你可能感兴趣的:(Golang,指针,数据结构,golang)