内容简介:结构体得字段可以是任何类型,甚至是结构体本身,也可以是函数或者接口new函数获取到得是结构体类型得指针使用new函数跟使用&T{}是等价的,都是产生结构体类型指针
type identifier struct { field1 type1 field2 type2 ... } 复制代码
结构体得字段可以是任何类型,甚至是结构体本身,也可以是函数或者接口
初始化方式
type Point struct { x, y int } 复制代码
- 使用new函数给结构体变量分配内存
new函数获取到得是结构体类型得指针
- 获取结构体类型指针
使用new函数跟使用&T{}是等价的,都是产生结构体类型指针
-
获取结构体类型
-
混合字面量语法
point1 := Point{0, 3} (A) point2 := Point{x:5, y:1} (B) point3 := Point{y:5} (C) 复制代码
结构体的类型定义在它的包中必须是唯一的,结构体的完全类型名是:packagename.structname
点号选择器
- 点号选择器可以给结构体的字段赋值
point.x = 5 复制代码
- 点号选择器可以获取结构体字段的值
x := point.x 复制代码
- 无论是结构体类型还是结构体类型指针,都可以使用点号来引用结构体字段
type myStruct struct { i int } var v myStruct // v是结构体类型变量 var p *myStruct // p是指向一个结构体类型变量的指针 复制代码
内存布局
结构体和它所包含的数据在内存中是以连续块的形式存在的
结构体工厂函数
Go不支持面向对象编程语言中的构造方法,但是可以通过函数实现
type File struct { fd int // 文件描述符 name string // 文件名 } // 定义工厂方法,函数名大写字母开头才能被跨包调用 func NewFile(fd int, name string) *File { if fd < 0 { return nil } return &File{fd, name} } // 调用工厂方法 f := NewFile(10, "./test.txt") 复制代码
如果想要强制使用工厂函数,那么可以将结构体的类型改为首字母小写
结构体的标签
结构体中的字段,除了名字和类型,还有一个可选的标签,它是附属在字段的字符串(相当于字段的解释)
- 标签的内容需要通过反射获取
type TagType struct { // tags field1 bool "An important answer" field2 string "The name of the thing" field3 int "How much there are" } func main() { tt := TagType{true, "Barak Obama", 1} for i := 0; i < 3; i++ { refTag(tt, i) } } func refTag(tt TagType, ix int) { // 使用reflect包 ttType := reflect.TypeOf(tt) ixField := ttType.Field(ix) fmt.Printf("%v\n", ixField.Tag) } 复制代码
匿名字段和内嵌结构体
- 结构体可以包含一个或多个匿名字段,此时字段的类型就是字段的名称
// 字段名称分别是:bool, string, int type TagType struct { bool string int } 复制代码
在结构体中,对于每种数据类型,只能有一个匿名字段
- 匿名字段本身也可以是一个结构体类型
Go语言的继承是通过内嵌或组合来实现的
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- GO语言学习笔记(四)GO语言控制语句
- GO语言学习笔记(一)Go语言的初步了解
- GO语言学习笔记(五)GO语言函数的简易计算
- 【Go语言学习】Linux下Go语言的安装与设置
- Go语言学习笔记02--go语言运算符与流程控制分支语句
- go语言学习
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UNIX 时间戳转换
UNIX 时间戳转换
HEX HSV 转换工具
HEX HSV 互换工具