美文网首页
Go语言结构体

Go语言结构体

作者: AuglyXu | 来源:发表于2018-09-27 14:46 被阅读0次

结构体

  • 和C语言几乎一模一样
  • 格式:
    type 结构体类型名称 struct{
    属性名称 属性类型;
    属性名称 属性类型;
    }

结构体变量的定义

  • 格式:var 结构体名称 结构体类型

  • 和切片和字典不一样,Go语言中结构体定义了就可以直接使用


结构体的初始化

  • 定义的同时完全初始化
  • 注意:定义的同时只能完全初始化
type Person struct{
    name string
    age int
}
var per Person = Person{"xxz",20}
per2 :=  Person{"xxz",20}
  • 先定义后完全初始化
type Person struct{
    name string
    age int
}
var per Person
per = Person{"xxz",20}
per = Person{name:"xxz",age:20}
  • 先定义后部分初始化
  • 注意点:定义的同时部分初始化必须加上初始化的key
type Person struct{
  name string
  age int
}
var per Person
per = {name:"xxz"}

结构体和函数

  • 结构体类型和数组一样,是值传递,函数内改变形参结构体属性的值不会影响到实参
type Person struct{
  name string
  age int
}
pp := Person{name:"xxz",age:18}
fmt.Println(pp.name)//"xxz"
change(pp)
fmt.Println(pp.name)//"xxz"

func change(pp Person){
  pp.name = "zs"
}

复杂的结构体

  • 结构体内的数据类型,如果是切片,字典这种数据类型,那么必须给他们初始化才能使用
type Person struct{
    name string
    age int
    sce []int
    dict map[string]string
}

var per Person
per.name = "xxz"// 不报错
per.age = 18//不报错

//per.sce[0] = 1//报错
//per.dict["name"] = "xxz"//报错
per.sce = make([]int,2)
per.sce[0] = 1
per.sce[1] = 2 //不报错
per.dict = make(map[string]string)
per.dict["name"] = "zs"
fmt.Println(per)//不报错

结构体类型的转换

  • 只有当结构体完全相同,完全相同,完全相同时才能相互转换
  • 包括属性名称,属性类型,属性顺序,属性个数完全相同

结构体匿名属性

  • 没有名称的属性叫匿名属性
  • 调用匿名属性用结构体名称.数据类型即可
type Person struct{
  int
  name string
}
var per Person = Person{666,"xxz"}
fmt.Println(per.int)//666
  • 结构体匿名属性一般用于结构体的嵌套定义
type Date struct{
  year int
  month int
  day int
}
type Person struct{
  name string
 // year int
 // month int
 // day int
  Date 
}
type Animal struct{
  name string
 // year int
 // month int
 // day int
 // birthday Date 
  Date
}

/ /定义

var per Person = {"xxz",Date{1998,4,9}}
fmt.Println(per.name)//"xxz"
fmt.Println(per.Date.year)// 1998

结构体嵌套定义

  • 第一种方式
type 结构体名称1 struct{
}
type 结构体名称2 struct{
    结构体名称1
}
  • 第二种方式
type 结构体名称1 struct{
}
type 结构体名称2 struct{
    结构体名称1
}
type 结构体名称3 struct{
    结构体名称2
}
  • 第三种方式
type 结构体名称1 struct{
}
type 结构体名称2 struct{
}
type 结构体名称3 struct{
    结构体名称1
    结构体名称2
}
  • 注意点:
    1 结构体的属性类型不能是当前结构体的类型
    2 只有匿名属性才会向上查找, 非匿名属性不会向上查找(访问结构体属性时,首先在源结构体内寻找属性,如果没有,再去嵌套的结构体内寻找属性)

相关文章

  • golang继承与接口

    继承 结构体 Go语言的结构体(struct)和其他语言的类(class)有同等的地位,但Go语言放弃了包括继 承...

  • 结构体

    结构体初识 结构体指针 结构体的匿名字段 结构体嵌套 Go语言中的OOP

  • 《Go语言四十二章经》第十八章 Struct 结构体

    《Go语言四十二章经》第十八章 Struct 结构体 作者:李骁 18.1结构体(struct) Go 通过结构体...

  • Go 语言程序设计——面向对象编程(5)

    结构体 Go 语言中创建自定义结构体最简单的方式是基于 Go 语言的内置类型创建 自定义类型也可以基于结构体创建,...

  • Go语言探索 - 10(原创)

    上一篇文章主要学习了Go语言的结构体以及结构体指针,本篇文章主要学习Go语言的切片以及Map。 Go语言数组的长度...

  • Go Struct

    Go语言通过自定义结构的方式来实现新的类型,结构体是类型中带有成员的复合类型。 Go语言使用结构体和结构体成员来描...

  • Golang 学习笔记四 结构体

    一、结构体 《快学 Go 语言》第 8 课 —— 结构体1.结构体类型的定义结构体和其它高级语言里的「类」比较类似...

  • Go结构体、方法、接口

    1 结构体 Go语言中没有“类”的概念,也不支持像继承这种面向对象的概念。但是Go语言的结构体与“类”都是复合结构...

  • 12-Go语言结构体

    结构体 结构体的基本概念 什么是结构体Go语言中的结构体几乎和C语言中的结构体一模一样都需要先定义结构体类型, 再...

  • 使用Golang完成的第一个项目

    Go语言和PHP的区别(Go语言特色) 没有类的概念,可以用结构体替代。给结构体定义变量,声明方法。 两个特殊的方...

网友评论

      本文标题:Go语言结构体

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