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()函数:

……

阅读全文

Vim | vimplus快捷键

插件相关

|快捷键|说明 |—— |,|Leader Key |<leader>n|打开 / 关闭代码资源管理器 |<leader>t|打开 / 关闭函数列表 |<leader>a|.h .cpp 文件切换 |<leader>u|转到函数声明 |<leader>U|转到函数实现 |<leader>o|打开 include 文件 |<leader>y|拷贝函数声明 |<leader>p|生成函数实现 |<leader>w|单词跳转 |<leader>f|搜索~目录下的文件 |<leader>F|搜索当前目录下的文本 |<leader>g|显示 git 仓库提交记录 |<leader>G|显示当前文件提交记录 |<leader>gg|显示当前文件在某个 commit 下的完整内容 |<leader>ff|语法错误自动修复 (FixIt) |<c-p>|切换到上一个 buffer |<c-n>|切换到下一个 buffer |<leader>d|删除当前 buffer |<leader>D|删除当前 buffer 外的所有 buffer |vim|运行 vim 编辑器时,默认启动开始页面 |<F5>|显示语法错误提示窗口 |<F7>|启用 markdown 实时预览 |<F8>|关闭 markdown 实时预览 |<F9>|显示上一主题 |<F10>|显示下一主题 |<leader>l|按竖线对齐 |<leader>=|按等号对齐 |Ya|复制行文本到字母 a |Da|剪切行文本到字母 a |Ca|改写行文本到字母 a |rr|替换文本 |<leader>r|全局替换,目前只支持单个文件 |gcc|注释代码 |gcap|注释段落 |vif|选中函数内容 |dif|删除函数内容 |cif|改写函数内容 |vaf|选中函数内容(包括函数名 花括号) |daf|删除函数内容(包括函数名 花括号) |caf|改写函数内容(包括函数名 花括号) |fa|查找字母 a,然后再按 f 键查找下一个 |<c-x><c-o>|Emoji:dog: 补全

……

阅读全文

Vim | 打造编C++IDE

使用 vimplus 打造C++ IDE

GitHub: https://github.com/chxuan/vimplus
支持平台:
macos/linux

安装vimplus

// 原来的链接, 国内速度较慢
$ git clone https://github.com/chxuan/vimplus.git ~/.vimplus

// github修改为镜像的链接
$ git clone --depth=1 https://github.com.cnpmjs.org/chxuan/vimplus.git ~/.vimplus
$ cd ~/.vimplus

//不加sudo
$ ./install.sh 

设置Nerd Font

为防止vimplus显示乱码,需设置mac终端字体为Droid Sans Mono Nerd Font

……

阅读全文

Linux | 删除大量文件指令--rsync

rsync的安装

rsync安装,有些系统默认安装有该命令
ubuntu系统

sudo apt-get install rsync

centos系统

sudo yum install rsync

rsync参数详解

rsync提供了一些跟删除有关的参数
rsync --help | grep delete
      -del                                an alias for --delete-during
      --delete                          delete extraneous files from destination dirs
      --delete-before             receiver deletes before transfer, not during
      --delete-during             receiver deletes during transfer (default)
      --delete-delay               find deletions during, delete after
      --delete-after                receiver deletes after transfer, not during
      --delete-excluded        also delete excluded files from destination dirs
      --ignore-errors             delete even if there are I/O errors
       --max-delete=NUM    don't delete more than NUM files
其中--delete-before接收者在传输之前进行删除操作

快速删除大量文件

假如你要在linux下删除大量文件,比如100万、1000万,像/var/spool/clientmqueue/的mail邮件,/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf *可能就不好使了。 rsync 可以用来清空目录或文件
先建立一个空目录

……

阅读全文

CPU的核与线程-4核8线程

查看cpu信息

$ cat /proc/cpuinfo

物理CPU

物理CPU就是计算机上实际配置的CPU个数。
在linux上可以打开cat /proc/cpuinfo 来查看,其中的physical id就是每个物理CPU的ID,能找到几个physical id就代表计算机实际有几个CPU。

……

阅读全文

TCP/IP | 大量TIME_WAIT对线上业务的影响

TCP的三次握手和四次挥手

8bdf9b9537f30646bf95dafe476884b2.png

TIME_WAIT概述

TIME_WAIT 状态:

  • TCP 连接中,主动关闭连接的一方出现的状态;(收到 FIN 命令,进入 TIME_WAIT 状态,并返回 ACK 命令)
  • 保持 2 个 MSL
    时间,即,4 分钟 ;(MSL 为 2 分钟)

TCP 连接建立后,「主动关闭连接」的一端,收到对方的 FIN 请求后,发送 ACK 响应,会处于 time_wait 状态;

……

阅读全文

Libevent | 定时器

libevent 实现定时器流程

首先初始化libevent库,并保存返回的指针

struct event_base * base = event_init();  

实际上这一步相当于初始化一个Reactor实例;在初始化libevent后,就可以注册事件了。

初始化事件event,设置回调函数和关注的事件 ,事实上这等价于调用event_set(&ev, -1, 0, timer_cb, NULL);

……

阅读全文

FFmpeg | 画中画和视频多宫格处理

FFmpeg生成画中画

静态画中画

将视频sub.mp4视频文件缩放成宽 480 、高 320 的视频,然后显示在 视频 input.mp4,x坐标为0,y 坐标为0 的位置

ffmpeg -re -i input.mp4 -vf "movie=sub.mp4, scale=480x320[test]; [in][test]overlay [out]" -vcodec libx264 output.flv

显示在画面的右下角,则需要用到 overlay 中x坐标与y坐标的内部变量:

ffmpeg -re -i input.mp4 -vf "movie=sub.mp4, scale=480x320[test]; [in][test]overlay=x=main_w-480:y=main_h-320 [out]" -vcodec libx264 output.flv

根据命令行可以分析出,除了显示在 overlay 画面中,子视频将会定位在主画面的 右边减去子视频的宽度,最下边减去子视频的高度的位置

……

阅读全文