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

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

内容简介:结构体得字段可以是任何类型,甚至是结构体本身,也可以是函数或者接口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-1 / 29.00元

1、“全球管理大师”、“日本战略之父”大前研一,职场励志最新巨作。 2、2010年1月中华工商联合出版社有限责任公司与日知公司继《货币战争2》《中国大趋势》之后,再度联手,重磅推出。 3、震撼中国职场的宗师级巨作,势必引领2010年中国职场4、世界著名出版商小学馆授予独家中文简体出版权。 5、试问,哪个老板不希望自己的员工不断实现自身的“再启动”呢? 6、只有不断激励鞭策自......一起来看看 《再启动》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具