『2018年1月知识点合集』

作者: 谢小路 | 来源:发表于2018-02-03 15:23 被阅读119次

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

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

    没办法。在本地使用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
    
    

    相关文章

      网友评论

        本文标题:『2018年1月知识点合集』

        本文链接:https://www.haomeiwen.com/subject/goyuzxtx.html