Golang使用QConf教程

这篇教程介绍了如何在Golang项目中使用QConf进行配置管理。QConf提供实时配置同步更新、高效读取以及多语言支持,确保在异常情况下保持服务稳定性。文章详细阐述了QConf的特点和架构,并给出了在Golang中编译和使用goqconf的步骤。
摘要由CSDN通过智能技术生成

Golang使用QConf教程

QConf 是一个分布式配置管理工具。 用来替代传统的配置文件,使得配置信息和程序代码分离,同时配置变化能够实时同步到客户端,而且保证用户高效读取配置,这使的工程师从琐碎的配置修改、代码提交、配置上线流程中解放出来,极大地简化了配置管理工作。

关于QConf的详细介绍可以看这里github.com/Qihoo360/QConf

特点

  • 一处修改,所有机器实时同步更新
  • 高效读取配置
  • 安装部署方便,使用简单
  • 服务器宕机、网络中断、集群迁移等异常情况对用户透明
  • 支持c/c++、shell、php、python、lua、java、go、node 等语言

架构

这里写图片描述

所有客户端通过libqconf,与本机的qconf-agent通过共享内存或消息队列通信。

编译goqconf的时候要使用

#cgo LDFLAGS: -lqconf -lm

如果找不到libqconf,通过查看qconf_agent来看qconf-agent所安装的目录

$ ps aux | grep qconf
root      1098  0.1  1.6 600300 131280 ?       Sl   Sep25   5:39 /usr/local/qconf/bin/qconf_agent

比如我的qconf-agent安装目录在:/usr/local/qconf/下,则在cgo后加条件-L/usr/local/qconf/lib
这样可以编译成功,但是在运行时还可能报错,找不到libqconf.so文件,这时需要在/usr/lib或/usr/lib64下创建libqconf的软连接:

$ sudo ln -s /usr/local/qconf/lib/libqconf.so /usr/lib64/libqconf.so
$ ll /usr/lib64/libqconf.so 
lrwxrwxrwx 1 root root 32 Sep 27 13:17 /usr/lib64/libqconf.so -> /usr/local/qconf/lib/libqconf.so

附上golibqconf.go的代码:

package go_qconf

/*
#cgo LDFLAGS: -lqconf -lm
#include <stdlib.h>
#include <stdio.h>
struct string_vector
{
    int count;      // the number of services
    char **data;    // the array of services
};
typedef struct string_vector string_vector_t;
typedef struct qconf_node
{
    char *key;
    char *value;
} qconf_node;
typedef struct qconf_batch_nodes
{
    int count;
    qconf_node *nodes;
} qconf_batch_nodes;
int qconf_init();
int qconf_destroy();
int init_string_vector(string_vector_t *nodes);
int destroy_string_vector(string_vector_t *nodes);
int init_qconf_batch_nodes(qconf_batch_nodes *bnodes);
int destroy_qconf_batch_nodes(qconf_batch_nodes *bnodes);
int qconf_get_conf(const char *path, char *buf, int buf_len, const char *idc);
int qconf_get_allhost(const char *path, string_vector_t *nodes, const char *idc);
int qconf_get_host(const char *path, char *buf, int buf_len, const char *idc);
int qconf_get_batch_conf(const char *path, qconf_batch_nodes *bnodes, const char *idc);
int qconf_get_batch_keys(const char *path, string_vector_t *nodes, const char *idc);
*/
import "C"

import (
    "fmt"
    "reflect"
    "unsafe"
)

type Errno int

func (e Errno) Error() string {
    s := errText[e]
    if s == "" {
        return fmt.Sprintf("unknown errno %d", int(e))
    }
    return s
}

Golang使用教程可以按照以下步骤进行学习: 1. 确保环境搭建完成:根据golang基础教程(一)中的指引,搭建好Golang的开发环境。 2. 了解开发规范及API:参考golang基础教程(二),学习Golang的开发规范和常用的API使用方法。 3. 学习变量与数据类型:阅读golang基础教程(三)和(四),掌握Golang中的变量声明和各种基本数据类型。 4. 掌握基本数据类型的转换:参考golang基础教程(五)和(六),学习Golang中基本数据类型的相互转换方法。 5. 理解指针的概念:阅读golang基础教程(七),了解指针在Golang中的作用和使用方法。 6. 学习数组和切片:参考golang基础教程(八)和(九),掌握Golang中数组和切片的定义和操作。 7. 熟悉map的使用:阅读golang基础教程(十),学习Golang中map的定义和使用方法。 8. 理解结构体的概念:参考golang基础教程(十一),了解Golang中结构体的定义和使用。 9. 掌握方法的使用:阅读golang基础教程(十二),学习Golang中方法的定义和调用。 10. 了解继承的概念:参考golang基础教程(十三),了解Golang中的继承实现方式。 11. 掌握接口和多态的使用:阅读golang基础教程(十四),学习Golang中接口的定义和多态的实现。 12. 学习异常处理:参考golang基础教程(十五),了解Golang中异常处理的方式。 13. 熟悉文件操作:阅读golang基础教程(十六),学习Golang中文件的读写操作方法。 14. 理解goroutine和channel的使用:参考golang基础教程(十七),了解Golang中并发编程的基本概念和使用方法。 15. 了解Golang并发原理:参考golang基础教程(十八),学习Golang中并发编程的底层原理。 16. 掌握反射的使用:阅读golang基础教程(十九),了解Golang中反射的基本操作和使用场景。 17. 学习tcp网络编程:参考golang基础教程(二十),了解Golang中基于TCP协议的网络编程方法。 18. 进行单元测试:阅读golang基础教程(附录一),学习Golang中单元测试的编写和执行。 以上是一个基本的Golang使用教程的概述,按照这些步骤,你可以系统地学习和掌握Golang的基础知识和常用技巧。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [golang基础教程](https://blog.csdn.net/weixin_37910453/article/details/87276411)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Golang基础教程](https://blog.csdn.net/a58125584s/article/details/124511834)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值