结构体的注意事项和使用细节

柯帆 · · 618 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1、结构体的所有字段在内存中是连续的。

内存图参考

2、结构体是用户单独定义的类型,和其他类型需要转换时需要有完全相同的字段(名字、个数和类型)。

有例程如下:

例程

这里声明了A、B两个结构体,拥有相同类型、相同数目的元素,但是当我们将B的实例b赋给A的实例a时,会发现有报错。所以下一步我们做了强制类型转换,如下:

强制类型转换

编译器没有报错。这里有个前提,之所以能将结构体B的实例b转换成A的实例a,是因为两者的名字、个数和类型(统称为字段)是一样的。个数和实例好理解,名字的影响如下:

两个结构体中的变量名不一样

可以发现改变变量名,编译器还是会报错。只有当A结构体和B结构体中的int型变量名都是Num时,两者之间才可以进行类型转换。

3、结构体进行type重新定义(相当于取别名),Golang认为是新的数据类型,但是相互间可以强转。

示范

4、struct的每个字段上,可以写上一个tag,该tag可以通过反射机制获取,常见的使用场景就是序列化和反序列化。

序列化使用场景

代码的案例演示如下图:

Monster的结构体

首先我们定义了一个Monster的结构体,然后针对Monster结构体做了一个序列化的处理:

序列化处理

最后输出的Monster结构体中的字段名,都没有首字母大写,而是有了如下结果:

结果

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:柯帆

查看原文:结构体的注意事项和使用细节

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

618 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传