写在前面:若有侵权,请发邮件告知。
转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉!
【若要到岸,请摇船:开源中国 不最醉不龟归】
很多年前学习了一下goland,但是没有怎么开始就放下了,这次贴了心学到底。看了一下,觉得goland比较重要的部分就是:1.函数;2.结构体;3.接口;4.并发。
每次要学什么东西之前,我就会狂搜罗一大堆相关的书籍及教程,然后从中挑选一两本或者各教程中某部分来看。这次也不例外,看了很多本关于goland的书,觉得还是《Go语言从入门到进阶实战》比较不错,比较适合我这种菜鸡(连菜鸟都不算)的人,并且里面的例子确实挺好的。好了,废话不多说,下面的内容就是看《Go语言从入门到进阶实战》这本书接口这部分的笔(抄)记(袭),感兴趣的可以买来学习一下。
Go语言通过用户自定义的方式形成新的类型,结构体是类型中带有成员的复合类型。Go语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。
Go语言中的类型可以被实例化,使用new或“&”构造的类型实例的类型是类型的指针。
结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。字段有以下特性:
1.字段拥有自己的类型和值;
3.字段的类型也可以是结构体,甚至是字段所在的结构体的类型。
Go语言的关键字type可以将各种基本类型定义为自定义类型,基本类型包括整型、字符串、布尔等。结构体是一种复合的基本类型。通过type定义为自定义类型后,使结构体更便于使用。
结构体的定义格式如下:
结构体的定义只是一种内存布局的描述,只有当结构体实例化时,才会真正地分配内存。因此必须在定义结构体并实例化后才能使用结构体的字段。
实例化就是根据结构体定义的格式创建一份与格式一致的内存区域,结构体实例与实例间的内存是完全独立的。
Go语言可以通过多种方式实例化结构体,根据实际需要可以选用不同的写法。
2.1 基本的实例化形式
结构体本身是一种类型,可以像整型、字符串等类型一样,以var的方式声明结构体即可完成实例化。
用结构体表示的点结构(Point)的实例化过程请参见下面的代码:
上面例子中,使用“.”来访问结构体的成员变量,如p.X和p.Y等。结构体成员变量的赋值方法与普通变量一致。
2.2 创建指针类型的结构体
Go语言中,还可以使用new关键字对类型(包括接头体、整型、浮点数、字符串等)进行实例化,结构体在实例化后会形成指针类型的结构体。
使用new的格式化如下:
其中:T为类型,可以是结构体、整型、字符串等。
Go语言让我们可以像访问普通结构体一样使用“.”访问结构体指针的成员。
下面的例子定义了一个玩家(player)的结构,玩家拥有名字、生命值和魔法值,实例化玩家(player)结构体后,可对成员进行赋值,代码如下:
经过new实例化的结构体实例在成员赋值上与基本实例化的写法一致。
提示:在C/C++语言中,使用new实例化类型后,访问其成员变量时必须使用“->”操作符。
2.3 取结构体的地址实例化
在Go语言中,对结构体进行“&”取地址操作时,视为对该类型进行一次new的实例化操作。取地址格式如下:
其中:T表示结构体类型
下面使用结构体定义一个命令行指令(Command),指令中包含名称,变量关联和注释等。对Command进行指针地址的实例化,并完成赋值过程,代码如下:
取地址实例化是最广泛的一种结构体实例化方式。可以使用函数封装上面的初始化过程。
结构体在实例化时可以直接对成员变量进行初始化。初始化有两种形式:一种是字段“键值对”形式及多个值的列表形式。键值对形式的初始化适合选择性填充字段较多的结构体;多个值的列表形式适合填充字段较少的结构体。
3.1 使用“键值对”初始化结构体
结构体可以使用“键值对”(Key value pair)初始化字段,每个“键”(key)对应结构体中的一个字段。键的“值”(Value)对应字段需要初始化的值。