传统时序图概念中参与者有角色和类对象之分,但这里我们不做此区分,用参与者表示一切参与交互的事物,可以是人、类对象、系统等形式。中间竖直的线段从上至下表示时间的流逝。
画法:
sequenceDiagram
mac_addr=`ifconfig |grep ether |head -n 1 | grep -o "[a-f0-9A-F]\\([a-f0-9A-F]\\:[a-f0-9A-F]\\)\\{5\\}[a-f0-9A-F]"` | |
$MAC_ADDR=$mac_addr|sed -e 's/[\:]//g' |tr '[a-z]' '[A-Z] |
最新版本整合进大安装包了,6.0以下有单独的client dev mysql connect c 6.0 或者直接apt 安装
sudo apt install libmysqlclient-dev
//#include "rapidjson/document.h" | |
rapidjson::Document doc; | |
doc.Parse(json_str.c_str()); | |
rapidjson::Value array_val = doc["arr_val_name"].GetArray(); | |
int int_val = doc["int_val_name"].GetInt(); | |
string str_val = doc["str_val_name"].GetString(); |
inline | |
std::vector<std::string> split(const std::string& str, char seperator) { | |
std::vector<std::string> results; | |
std::string::size_type start = 0; | |
std::string::size_type sep = str.find(seperator); | |
while (sep != std::string::npos) { | |
if (start < sep) | |
results.emplace_back(str.substr(start, sep - start)); |
获取匹配的第一条记录, 否则根据给定的条件创建一个新的记录 (仅支持 struct 和 map 条件) | |
``` | |
// 未找到 | |
db.FirstOrCreate(&user, User{Name: "non_existing"}) | |
//// INSERT INTO "users" (name) VALUES ("non_existing"); | |
//// user -> User{Id: 112, Name: "non_existing"} | |
// 找到 | |
db.Where(User{Name: "Jinzhu"}).FirstOrCreate(&user) | |
//// user -> User{Id: 111, Name: "Jinzhu"} |
r.POST("/post", func(c *gin.Context) {
ids := c.QueryMap("ids")
names := c.PostFormMap("names")
c.JSON(http.StatusOK, gin.H{
"ids": ids,
"names": names,
})
})
创建log,启用hook,增加log按日期文件切分,自动删除旧日志,记录行号等功能
import(
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
log "github.com/sirupsen/logrus"
)
func initLog() {
path := "./log/screen-monitor.log"
vars.Logger = log.New()
vars.Logger.Hooks.Add(log_hooks.NewContextHook())