Jump to Navigation

Document

Programming articles and books.

cgo封装C库总结

简介

cgo是go语言提供的一种与C语言相互调用的方式。

cgo能够让开发者直接在.go源代码文件中嵌入C代码。

在嵌入的C代码比较长的时候,还允许在分离.c文件中编写C代码。

cgo的基本处理机制是,根据特定格式的cgo指令,解析出C源代码和编译参数,

调用gcc编译并把结构合并到最终二进制程序中。

带来的问题,编译速度慢了很多。 两种模型,

cgo用法:

声明使用cgo

在.go文件中,插入这么几行,表示开启cgo功能:

/*

*/

import "C"

其实这并不是一个简单的开关,而是特定的语法序列标识,当go解析器遇到该语法序列时,

自动进入cgo模式,处理与cgo有关的功能。

注意,这个注释确实是注释,并没有写错。在这个注释段能够添加C源代码。

一般把这个块叫做“C语言嵌入注释块”。

还有一个需要注意的是在注释结尾处,要紧跟着import "C"语句,否则这块注释会被当作注释忽略了。

配置服务设计

背景

现在,一个完整的系统一般从设计上都是松耦合的,可能包含不同的子系统,并且子系统都可能是定制化开发的。像定制化开发的redis、beanstalkd这类服务,用于实现更好高可用等目标。还有可能开发的各种独立的队列worker程序。

虽然这些程序上有调度维护和管理,但其相关配置一般如果没有统一的方式,容易造成配置数据的混乱,出现多份配置的问题,配置不一致的问题,配置更新的非原子化,维护成本高等问题。

目标

配置服务用途比较多,有php层次的,有定制服务层次的,或者有完全自主开发的服务层次的。有些是一次读取,有些则需要运行时多次读取。需要对这些不同需求综合考虑,实现以下目标:

1、服务化的

2、可靠的

3、高效的

4、可扩展的

5、可维护的

6、易用的

7、一致性的

基于以上场景,根据需求,引入一种配置服务etcd模块,并在此模块为基础上,构建统一的配置服务系统,将在根本上改善有关配置数据的诸多问题。

Category:

我的Arch Linux aur包仓库

由于一些aur包需要多台机器使用,每台机器都安装很不方便,
借助Git @ OSC建立了一个简单的aurcare仓库,方便一些aur包的使用。
感谢Git @ OSC 的开放免费存储服务。
当然这样也还有不方便的地方,就是这个仓库允许的单文件最大50M,有些大的包无法放在上面。

仓库使用,在/etc/pacman.conf中添加这么一行即可。

[aurcare]
Server = https://git.oschina.net/kitech/aurcare/raw/master/

Category:

另一种Qt的Ruby语言绑定方式

PHP中的函数式编程特性分析

一、引言
在写此文时,想起之前看过的一句话,如果要学习一门新的语言,那么就学习一门能够改变你的思维方式的语言。
本着这句对我触动比较大的一句话,一直在关注着LISP/Scheme这类直接产生函数式编程方式的语言。
在这中间看过一些相关的资料,试着编写过一些代码,却一直停留在学习试验阶段,很难写出像样的可用程序来。

在最近几年中,又是一个计算机界推出新语言高潮。比较新的有Closure,Go等。
并且一些比较老的语言像C++,Python,Perl,发展变化的步伐也变大了。
在C++11中,也添加了匿名函数的支持。nodejs的javascript语言,更是标榜着“披着C语言外衣的LISP”。
从这些变化除了让程序更高效,功能更丰富全面外,也提供了大量使用函数式思维解决程序复杂度不断上升的问题的特性。

如何在lxc容器中使用tun/tap设备

tun/tap需要用到/dev/net/tun设备文件,

默认情况下lxc不会创建/dev/net/tun设备文件。

Category:

函数式思维系列

hyperdex 不同数据类型hash算法

hyperdex使用hyperspace hashing算法对记录的每个字段做哈希, 并且所有字段的哈希值作为每个维度的值映射到多维度空间中的一个点上。

通过化分多维空间的方式,把所有的记录分布到不同的存储节点上,实现hyperdex的分布式NoSQL功能。

对于hyperdex的实现,它所支持的土原子数据类型各自有不同的哈希算法,

原子类型有float,int64,string,每种类型的哈希算法如下:

一、hyperdex数据类型

字符串,长度限制???

int64类型,

float类型,

二、hyperdex容器数据类型

list列表类型,

set集合类型,

map映射类型,

三、不同数据类型的hash值计算

字符串类型hash算法

使用cityhash算法计算该字段值的hash值。

int64类型hash算法

unpack64le 把值高字节与低字节交换位置,64位为8个字节,即1,8交换,2,7交换,3,6交换,4,5交换

配置系统进化

系统就像生物进化,从原始粗糙进化的强大灵巧。

一、从配置的起源说起

二、配置的最初阶段

三、配置的变异阶段

四、配置的变异后优化

五、配置的归类隐藏

六、配置去哪儿

平台化建设步伐

hehhe

Category:

页面

订阅 RSS - Document


Main menu 2

by Dr. Radut