{
if (!yaml_parser_parse(parser, event))
{
/* Useful YAML vars: parser.context_mark.line+1, parser.context_mark.column+1, parser.problem, parser.problem_mark.line+1, parser.problem_mark.column+1 */
printf( "[%s, line %d] libyam parse error at line %ld in '%s'", __FILE__, __LINE__, parser.problem_mark.line+1, yaml_file);
}
if ( event.type == YAML_DOCUMENT_START_EVENT )
{
//yaml file first line is version
//%YAML 1.1
//---
yaml_version_directive_t *ver = event.data.document_start.version_directive;
if ( ver == NULL )
{
printf( "[%s, line %d] Invalid configuration file. Configuration must start with "%%YAML 1.1"", __FILE__, __LINE__);
}
int major = ver-major;
int minor = ver-minor;
if (! (major == YAML_VERSION_MAJORminor == YAML_VERSION_MINOR) )
{
printf( "[%s, line %d] Configuration has a invalid YAML version. Must be 1.1 or above", __FILE__, __LINE__);
return -1;
}
}
else if ( event.type == YAML_STREAM_END_EVENT )
{
done = true;
}
else if ( event.type == YAML_MAPPING_END_EVENT )
{
sub_type = 0;
}
else if ( event.type == YAML_SCALAR_EVENT )
{
getvalue(event,configs);
}
}
return 0;
}
int main(int argc, char *argv[]){
pKeyValue pconfig=webrtcconfig[0];
Load_YAML_Config("../../etc/kvmagent.yml",pconfig);
printConfig(config);
freeConfig(config);
}
34.Go YAMLYAML是一种流行的格式,用于以人类友好的格式序列化数据, 类似JSON但更易于阅读 。
由于其表达能力和可读性,YAML作为配置文件的格式很受欢迎 。
它也用于更复杂的场景中,例如推动Ansible服务器自动化 。
标准库中没有用于处理YAML格式的软件包,但是社区库包括gopkg.in/yaml.v2
将YAML文件读取到Go结构中:
YAML:
YAML解码与JSON解码非常相似 。
如果你知道YAML文件的结构,则可以定义映射该结构的结构 , 并将指向顶级结构的结构的指针传递给yaml.Decoder.Decode()函数(或从[]进行解码的yaml.Unmarshal()) 。字节片) 。
YAML解码器在结构字段名称和YAML文件中的名称之间进行智能映射,以便 YAML中的名称值被解码为结构中的字段名称 。
最好使用yaml struct标签创建显式映射 。我仅在示例中省略了它们,以说明未指定它们时的行为 。
将struct写入YAML文件:
yaml.Marshal将interface {}作为参数 。可以传递任何Go值 , 并将其类型包装到interface {}中 。
Marshaller将使用反射检查传递的值并将其编码为YAML字符串 。
在序列化结构时,仅对导出的字段(其名称以大写字母开头)进行序列化/反序列化 。
在我们的示例中,未对fullName进行序列化 。
结构被序列化为YAML字典 。默认情况下,字典键与结构字段名称相同 。
结构字段名称在字典键名称下序列化 。
我们可以提供带有struct标签的自定义映射 。
我们可以将任意的struct标签字符串附加到struct字段 。
yaml:“ age”指示YAML编码器/解码器将名称age用于表示字段Age的字典关键字 。
序列化结构时,将值和指针传递给它会产生相同的结果 。
传递指针效率更高,因为按值传递会创建不必要的副本 。
golangci-line 工具介绍在ci过程中,经常有一些可以通过静态分析或者白盒检测去避免一些问题以及规范代码格式!使用Go语言一般是使用golangci-line作为代码检测工具!
参考:
安装:curl-sSfL| sh -s -- -b $(go env GOPATH)/bin v1.43.0
版本信息:golangci-lint--version
目前我司是自己二开的 golangci-line,所以这里使用的开源版本 , 其实大同小异,就是开发了一些插件!
推荐阅读
- 直播绘画娃娃教程,直播间怎么画涂鸦
- 怎么登录先锋小程序,先锋上海小程序注册
- 媳妇下载,电视剧媳妇
- 数学函数c语言用法 数学函数 c语言
- wordpress镜像如何修改权限,wordpress windows
- 如何记住新媒体讲座的名字,新媒体讲座主持稿
- 区块链和现代金融,区块链和现代金融的关系
- php添加数据至数据库 php添加数据到数据库失败
- 奇奇怪怪的linux命令,linux有趣的指令