『2018年1月知识点合集』

我有一个习惯,就是不断的记录在工作中反复用到的知识点,原本我很喜欢使用印象笔记和有道云笔记,其一是云笔记的同步功能,其二是云笔记的搜索功能,当你输入的笔记多了之后,你才会发现搜索功能是多么的重要。

鉴于公司内部对信息安全管理比较严格,这种云笔记在内部禁止了。很遗憾。大凡优秀的企业都不应该在限制这些条条框框。

没办法。在本地使用Atom 加上 Markdown 插件编写笔记。

初期我是这么做:

  • 每天一个页面

这个页面包含当天的待办事项、遇到的问题收集、以及解决办法的思路。

后期,我不这么做了,是因为Atom + Markdown 不支持搜索功能。我需要一个一个翻才能找到我需要的知识。

  • 更改为每月一个页面

同样包含本月的代办事项、遇到的问题、以及解决问题的思路。文本内支持搜索。这样就把几百个文件的搜索量压缩在12个文件内,文件内搜索可以轻易达到。

这篇文章就是我遇到问题的知识点的合集。希望对你有启发。

既然是合集,你可能看到知识点不成体系。相互之间没有太多联系,相互独立。

Git

如何将一个分支的修改移植到另一个分支?

背景:

远端维护着好几个分支,每个分支对应的不同的发布版本,但是有些修改却是一样的。为了快速实现修改,可以使用 cherry-pick 功能

具体做法:

  • 在分支上进行正常提交(add、commit、push)
  • git log 查看最新提交的log id
  • 切换到远程分支并拉取远程分支的最新版本 git checkout -b bugfix -t remotes/origin/bugfix
  • 同步修改:git cherry-pick log-id
  • git push bugfix

Go 项目工程组织

  • 设置GOPATH: bin、pkg、src
  • 设置GOROOT
  • src 即是我们项目和第三方库的目录
  • go get 下载的库在src 下
  • 创建工程也在src 目录下

库和工程在同一级目录下,怕影响库文件的使用,这个时候结合govender 能很好的管理自己创建的工程里使用到的第三方库。

json 检查工具

json 是一种比较常见的数据交互格式,但是在linux 手动配置经常可能受限于格式导致配错。这个时候格式检查工具就能有很好的用途。还可以进行内容的提取。

  • jq

下载:

$ wget http://stedolan.github.io/jq/download/linux32/jq (32-bit system)
$ wget http://stedolan.github.io/jq/download/linux64/jq (64-bit system)
$ chmod +x ./jq
$ sudo cp jq /usr/bin


使用示例:

{
        "name": "Google",
        "location":
                {
                        "street": "1600 Amphitheatre Parkway",
                        "city": "Mountain View",
                        "state": "California",
                        "country": "US"
                },
        "employees":
                [
                        {
                                "name": "Michael",
                                "division": "Engineering"
                        },
                        {
                                "name": "Laura",
                                "division": "HR"
                        },
                        {
                                "name": "Elise",
                                "division": "Marketing"
                        }
                ]
}

# 使用

cat json.txt | jq '.name'  == > “Google”

cat json.txt | jq '.location.city' == > "Mountain View"

cat json.txt | jq '.employees[0].name' == > 
{
  "city": "Mountain View",
  "street": "1600 Amphitheatre Parkway"
}


cat json.txt | jq .   ## 检查格式
  • json.tool

使用:格式化输出并检查格式

cat json.txt | python -m json.tool

GoStub, GoMock, GoConvey

这几个库都是和Go 编写测试用例相关的库,用来打桩或者替代原生测试框架。

  1. GoConvey
  • 文件名:xxx_test.go
  • 函数名: TestXxxxx(t *testing.T)
  • Convey(message, t, func(){核心处理程序 So(断言处理)})
  • Convey 嵌套:最外层和内层:最外层带 t 参数,内层不带 t 参数
  1. GoStub
  • 全局变量打桩:stubs := Stub(&num, 150)
  • 函数打桩: stubs := StubFunc(&Exec,"xxx-vethName100-yyy", nil)
  • 内置函数打桩:定义库函数变量
  • 为过程打桩:stubs := StubFunc(&DestroyResource)
  1. Monkey
  • Patch(): 第一个参数是目标函数名,第二个参数是桩函数的函数名,习惯用法是匿名函数或闭包,返回值是一个PatchGuard对象指针,主要用于在测试结束时删除当前的补丁
示例:打桩 ioutil.ReadFile 函数

guard := Patch(ioutil.ReadFile, func (filename string) ([]byte, error) {
    return fileBytes, nil
})
defer guard.Unpatch()

  • PatchInstanceMethod()
var e *Etcd
guard := PatchInstanceMethod(reflect.TypeOf(e), "Get", func(_ string) []string {
    return []string{"task1", "task5", "task8"}
})
defer guard.Unpatch()


Govendor

前提:安装 git

  1. go get
  2. govendor init
  3. govendor add +external

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

在工程目录下执行 govendor init 即会在工程下生成一个vendor 目录,用来存放项目中用到的第三方库。

govendor add +external 即将src 下的工程用到的库拷贝至vendor 目录下。

是个很好的管理第三方库的工具。和python 中的virtualenv 很像。

Go import

  • . 省略前缀
  • 起别名
  • 完整的名称
  • 绝对路径
  • 相对路径
  • _ 导入包:只是完成初始化操作 init 函数

syc

func (o *Once) Do(f func()) # 多次调用,只取一次
var once sync.Once
func GetPsmCfgInstance() *PsmCfg {
    once.Do(func() {
        inst = &PsmCfg{}
    })
    return inst
}

yaml 格式检查工具


sudo apt-get install yamllint
pip install yamllint

用法:yamllint 文件名.yml

参考文献

yaml 文件读取工具

pip install shyaml
get-type:获取相应的类型
get-value:获取值
get-values{,-0}:对序列类型来说,获取值列表
keys{,-0}:返回键列表
values{,-0}:返回值列表
key-values,{,-0}:返回键值对

cat struct.yaml | shyaml get-value parameters.iaas

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,392评论 25 707
  • 首先写好需要定时执行的脚本root/mysql_backup/backup.sql: 这里备份mysql,并将压缩...
    不学无术阅读 298评论 0 0
  • “量化投资”,感觉距离普通投资者是极其遥远。其实,量化投资思路和手法很多,有不少其实普通散户也可以践行。什么...
    田宇_5020阅读 144评论 2 2
  • 那一年, 你对我说, 努力可以换来自由, 我却忘了自由的意义。 五月 努力的我却并不自由, 反而越陷越深, 偶然抬...
    高玉柏阅读 224评论 0 2