Go语言学习笔记 - PART7 - 结构体

栏目: Go · 发布时间: 6年前

内容简介:结构体得字段可以是任何类型,甚至是结构体本身,也可以是函数或者接口new函数获取到得是结构体类型得指针使用new函数跟使用&T{}是等价的,都是产生结构体类型指针
type identifier struct {
    field1 type1
    field2 type2
    ...
}
复制代码

结构体得字段可以是任何类型,甚至是结构体本身,也可以是函数或者接口

初始化方式

type Point struct { x, y int }
复制代码
  • 使用new函数给结构体变量分配内存
    Go语言学习笔记 - PART7 - 结构体

new函数获取到得是结构体类型得指针

  • 获取结构体类型指针
    Go语言学习笔记 - PART7 - 结构体

使用new函数跟使用&T{}是等价的,都是产生结构体类型指针

  • 获取结构体类型

    Go语言学习笔记 - PART7 - 结构体
  • 混合字面量语法

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语言学习笔记 - PART7 - 结构体

结构体和它所包含的数据在内存中是以连续块的形式存在的

结构体工厂函数

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语言的继承是通过内嵌或组合来实现的


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

领域驱动设计

领域驱动设计

埃文斯 / 赵俐、盛海艳、刘霞 / 人民邮电出版社 / 2010-11 / 69.00元

《领域驱动设计:软件核心复杂性应对之道》是领域驱动设计方面的经典之作。全书围绕着设计和开发实践,结合若干真实的项目案例,向读者阐述如何在真实的软件开发中应用领域驱动设计。书中给出了领域驱动设计的系统化方法,并将人们普遍接受的一些最佳实践综合到一起,融入了作者的见解和经验,展现了一些可扩展的设计最佳实践、已验证过的技术以及便于应对复杂领域的软件项目开发的基本原则。《领域驱动设计:软件核心复杂性应对之......一起来看看 《领域驱动设计》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器