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线程
TCP/IP | 大量TIME_WAIT对线上业务的影响
TCP的三次握手和四次挥手
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 画面中,子视频将会定位在主画面的 右边减去子视频的宽度,最下边减去子视频的高度的位置
……