前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go结构类型

Go结构类型

作者头像
恋喵大鲤鱼
发布2019-02-22 11:11:28
4510
发布2019-02-22 11:11:28
举报
文章被收录于专栏:C/C++基础C/C++基础

1.简介

结构是已命名的元素序列,被称为字段,其中每一个元素都有一个名字和类型。 字段名可显示地指定(标识符列表)或隐式地指定(匿名字段)。 在结构中,非空白字段名必须是唯一的。

代码语言:javascript
复制
// 空结构
struct {}

// 带7个字段的结构
type STest struct {
	x, y int
	u float32
	_ float32  // 填充空白字段
	_ float64  // 填充空白字段
	A *[]int
	F func()
}

2.匿名字段

通过有类型而无显式字段名声明的字段为匿名字段,亦称为嵌入式字段或类型的嵌入。 嵌入的类型必须是一个类型名 T 或一个非接口类型名的指针 *T, 且 T 本身不能为指针类型。未指定字段名的类型名可以作为字段名。

代码语言:javascript
复制
// 带类型为T1,*T2,P.T3和*P.T4的4个匿名字段的结构
struct {
	T1        // 字段名为T1
	*T2       // 字段名为T2
	P.T3      // 字段名为T3
	*P.T4     // 字段名为T4
	x, y int  // 字段名为x和y
}

以下为非法声明,因为字段名在结构类型中必须是唯一的:

代码语言:javascript
复制
struct {
	T     // 与匿名字段*T及*P.T相冲突
	*T    // 与匿名字段T及*P.T相冲突
	*P.T  // 与匿名字段T及*T相冲突
}

3.已提升的字段与方法

在结构 x 中,假设f是匿名字段的字段或者方法,如果x. f是合法的选择者,则匿名字段的字段或方法 f 即为已提升的。

已提升字段除了不能用作该结构复合字面中的字段名外, 其行为如同结构的一般字段。

给定结构类型 S 与名为 T 的匿名字段类型,包含在结构方法集中的已提升方法有: (1)若 S 包含一个匿名字段 T,则 S 与 *S 的方法集均包含带接收者 T 的已提升方法。*S 的方法集也包含带接收者 *T 的已提升方法。 (2)若 S 包含匿名字段 *T,则 S 与 *S 的方法集均包含带接收者 T 或 *T 的已提升方法。

4.字段标注

字段声明可后跟一个可选的字符串字面标注,成为字段的属性。 标注可通过反射接口获得,否则就会被忽略。

代码语言:javascript
复制
// 一个对应于时间戳协议缓存的结构.
// 标注字符串定义了协议缓存的字段号.
struct {
	microsec  uint64 "field 1"
	serverIP6 uint64 "field 2"
	process   string "field 3"
}

参考文献

[1]Go编程语言规范

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简介
  • 2.匿名字段
  • 3.已提升的字段与方法
  • 4.字段标注
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档