美文网首页
09 | 结构体

09 | 结构体

作者: 刀斧手何在 | 来源:发表于2020-03-21 18:16 被阅读0次
  • 声明使用结构体
func TestStruct(t *testing.T){
    stu := struct{
        name string
        age int
    }{"fangle",18}
    t.Log(stu)
}
//result : {fangle 18}

是的上面的代码等价于

func TestStruct(t *testing.T){
    var stu struct{
        name string
        age int
    }
    stu.name = "fangle"
    stu.age = 18
    t.Log(stu)
}
//result : {fangle 18}

这就是一个结构体的声明了。声明了一个有name和age 的结构体,并使用。并不需要type。
当然日常中,我们经常是这样用:

type student struct {
    name string
    age int
}
func TestStruct(t *testing.T){
    var stu student
    stu.name = "fangle"
    stu.age = 18
    t.Log(stu)
}
//result : {fangle 18}

使用type只是为了使用方便,给结构体定义一个别名。其实结构体的声明,和type无关。

  • 创建结构体指针
func TestStruct(t *testing.T){
    stuPtr := new(struct {
        name string
        age int
    })
    stuPtr.name = "fangle"  //(*stuPtr).name
    stuPtr.age = 18   //(*stuPtr).age
    t.Log(stuPtr)
}
//result : &{fangle 18}

结构体指针不能使用 -> 访问结构体内的成员。结构体指针使用.访问结构体成员时会自动转化为(*stuPtr)

  • 结构体是值类型
type student struct {
    name string
    age int
}
func TestStruct(t *testing.T){
    stu := student{"fangle",18}
    stuImg := stu
    stuPtr := &stu
    stuPtr.name = "刀斧手何在"
    t.Log(stuImg,stu,stuPtr)
}
//result : {fangle 18} {刀斧手何在 18} &{刀斧手何在 18}

在函数直接传递结构体,也是传递的结构体的拷贝。这点在后续的值接收者和指针接收者也会见到

  • 包内私有成员变量被json序列化时忽略
type student struct {
    Name string
    age int
}
func TestStruct(t *testing.T){
    stu := student{"fangle",18}
    jsonData,err:= json.Marshal(stu)
    t.Log(string(jsonData),err)
}
//result: {"Name":"fangle"} <nil>
  • 使用struct tag 指定序列化规则
type student struct {
    Name string `json:"名字"` //使用名字作为键名
    age int `json:"age"`  //小写开头忽略
    School string `json:"-"` //主动设置忽略
    Class string `json:"class,omitempty"` //使用class名字,空白时不加入序列化
    Group string `json:",omitempty"` //使用默认名称,空白时不加入序列化
}
func TestStruct(t *testing.T){
    stu := student{"fangle",18,"就是中学","","赛艇组"}
    stu2 := student{"何在",20,"不是高中","唱诗班",""}

    stuList := [...]student{stu,stu2}
    jsonData,_:= json.Marshal(stuList)

    t.Log(string(jsonData),stu,stu2)
}
//result : [{"名字":"fangle","Group":"赛艇组"},{"名字":"何在","class":"唱诗班"}] 
// {fangle 18 就是中学  赛艇组} {何在 20 不是高中 唱诗班 }

相关文章

  • 100 Days of Swift - Day 09 - 结构体

    100 Days of Swift - Day 09 - 结构体(Structs part 2) 9.1 结构体...

  • 09 | 结构体

    声明使用结构体 是的上面的代码等价于 这就是一个结构体的声明了。声明了一个有name和age 的结构体,并使用。并...

  • 结构体

    [toc] 结构体的定义方式 先定义结构体类型,再定义结构体变量 定义结构体类型的同时定义结构体变量 定义结构体类...

  • 【C语言笔记】<十九>结构体

    结构体的基本概念 结构体初始化 结构体的内存存储细节 结构体定义的方式 结构体类型的作用域 指向结构体的指针 结构...

  • C结构体和链表

    一,结构体变量定义及初始化 二,无名结构体 备注:无名结构体很少使用 三,宏定义结构体 四,结构体嵌套 五,结构体...

  • 结构体

    结构体定义* 结构体中的格式:* struch 结构体名* {* 结构体成员变量* }* 结构体中的特点* 1.结...

  • 结构体数组的定义

    结构体数组的定义 1、先定义结构体类型,再定义结构体数组 2、定义结构体类型的同时定义结构体数组 3、省略结构体类...

  • C#结构体,析构方法,跨程序访问

    结构体 结构体定义 结构体的语法格式: struct + 结构体名 { 结构体成员变量(相当于类中的字段) } 结...

  • 结构体

    结构体有名定义 无名定义 结构体嵌套定义 结构体内存对齐 结构体成员初始化 结构体变量引用 结构体的有名定义:直白...

  • 菜鸡学Swift3.0 13.结构体

    结构体 struct 是值类型 1.定义结构体 struct 结构体类型 { var 结构体属性:类型 ...} ...

网友评论

      本文标题:09 | 结构体

      本文链接:https://www.haomeiwen.com/subject/ynxvthtx.html