分类 编程.Golang 中的文章

Grpc | 概述

OverView

gRPC是由Google主导开发的RPC框架,使用HTTP/2协议并用ProtoBuf作为序列化工具。其客户端提供Objective-C、Java接口,服务器侧则有Java、Golang、C++等接口,从而为移动端(iOS/Androi)到服务器端通讯提供了一种解决方案。 当然在当下的环境下,这种解决方案更热门的方式是RESTFull API接口。该方式需要自己去选择编码方式、服务器架构、自己搭建框架(JSON-RPC)。gRPC官方对REST的声音是:

……

阅读全文

Cgo | 使用libevent库实现一个定时器

使用libevent库作为例子

下载 & 编译 & 安装libevent


$ git clone https://github.com.cnpmjs.org/libevent/libevent.git

$ cd libevent && mkdir build && cd build


$ cmake ..

$ make

libevent实现的定时器


// main.cpp

#include "event.h"


struct event ev;

struct timeval tv;

void time_cb(evutil_socket_t fd, short event, void *argc)

{

  printf("timer wakeup\n");

  event_add(&ev, &tv); // reschedule timer

}


int main()
{

  struct event_base *base = event_base_new();

  tv.tv_sec = 2;

  tv.tv_usec = 0;


  evtimer_set(&ev, time_cb, NULL);

  event_base_set(base, &ev);

  event_add(&ev, &tv);

  event_base_dispatch(base);


  event_base_free(base);

}

go调用libevent实现定时器

把编译好的头文件和库文件放到go工程里

……

阅读全文

Golang | builds

概述

通常我们会给每个产品环境设置不同的配置,比如 redis 要在开发环境就连接 localhost:6379,测试环境可能连接某一个主机的 redis。

如果放在 go 里面是否可行?因为 go 是编译二进制包,也没有动态加载这么一说,那怎么实现?

……

阅读全文

Cgo | 简单使用

使用自己的C函数

文件名:testC.go

package main

/*
#include <stdio.h>
#include <stdlib.h>
void c_print(char *str) {
    printf("%s\n", str);
}
*/
import "C" //import C 必须单起一行,并且紧跟在注释行之后
import "unsafe"

func main() {
    s := "Hello Cgo"
    cs := C.CString(s)               //字符串映射
    C.c_print(cs)                    //调用C函数
    defer C.free(unsafe.Pointer(cs)) //释放内存
}

说明:
1、go代码中的C代码,需要用注释包裹,块注释和行注释均可,其次import “C”是必须的,并且和上面的C代码之间不能用空行分割,必须紧密相连

……

阅读全文

Golang | 使用Lumberjack+zap进行日志切割归档

使用Lumberjack+zap进行日志切割归档

为了添加日志切割归档功能,我们将使用第三方库Lumberjack来实现。

安装

执行下面的命令安装Lumberjack

go get -u github.com/natefinch/lumberjack

zap logger中加入Lumberjack

要在zap中加入Lumberjack支持,我们需要修改WriteSyncer代码。我们将按照下面的代码修改getLogWriter()函数:

……

阅读全文