Gob 通常用于远程方法调用(RPCs,参见 15.9 的 rpc 包)参数和结果的传输,以桥扰及应用程序和机器之间的数据传输。 它和 JSON 或 XML 有什么不同呢?Gob 特定地用于纯 Go 的环境中,例拿毁如,两个用 Go 写的服务之间的通信。这样的话服务可以被实现得更加高效和优化。 Gob 不是可外部定义,语言无关的编码方式。因此它的首选格式是二进制,而不是像 JSON 和 XML 那样的文本格式。 Gob 并不是一种不同于 Go 的语言,而是在编码和解码过程中用到了 Go 的反射。
Gob 文件或流是完全自描述的:里面包含的所有类型都有一个对应的描述,并且总是可以用 Go 解码,而不需要了解文件的内容。
只有可导出的字段会被编码,零值会被忽略。在解码结构体的时候,只有同时匹配名称和可兼容类型的字段才会被解码敏敏旦。当源数据类型增加新字段后,Gob 解码客户端仍然可以以这种方式正常工作:解码客户端会继续识别以前存在的字段。并且还提供了很大的灵活性,比如在发送者看来,整数被编码成没有固定长度的可变长度,而忽略具体的 Go 类型。
好世轿吧,慢慢来分析。
EXTERN int libGobmem_Init _ANSI_ARGS_((Gobmem_Interp * interp))1、EXTERN
在芦仿代码的某处应有类似的定义:
#define EXTERN externextern 是修饰词,表示函数/变量只是声明,不是定义。
2、返回值,函数名和形参
int libGobmem_Init _ANSI_ARGS_((Gobmem_Interp * interp))int 是返回值
libGobmem 是库的前缀
Gobmem_Interp * interp 是形参
3、_ANSI_ARGS_
在你的代码的某处,应该有类似的宏定义:
#ifdef __STDC__#define _ANSI_ARGS_(x) x
#else
#define _ANSI_ARGS_(x) ()
#endif
这个宏主要是给编译器用的,有些很老的编译器不的个数和类型(例如void f(int x, int y))。支持prototypes 的编译器会自动 #define 一个__STDC__,这个宏是为了编译器兼容。当然,这是很搜哗肆老很老的故事了。
在你看代码的时候,这个函数其实可以简化成这样:
int init(Gobmem_Interp * interp)就是一个库 gobmem 的初始化函数,接受一个Gobmem_Interp * 类型的指针,初始化成功会返回 0;失败会返回一个非 0 的错误码。
希望对你有用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)