前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『2018年1月知识点合集』

『2018年1月知识点合集』

作者头像
谢伟
发布2018-06-06 13:32:48
1.2K0
发布2018-06-06 13:32:48
举报
文章被收录于专栏:GopherCoderGopherCoder

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

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

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

下载:

代码语言:javascript
复制
$ 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

使用示例:

代码语言:javascript
复制
{
        "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

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

代码语言:javascript
复制
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对象指针,主要用于在测试结束时删除当前的补丁
代码语言:javascript
复制
示例:打桩 ioutil.ReadFile 函数

guard := Patch(ioutil.ReadFile, func (filename string) ([]byte, error) {
    return fileBytes, nil
})
defer guard.Unpatch()
  • PatchInstanceMethod()
代码语言:javascript
复制
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

代码语言:javascript
复制
func (o *Once) Do(f func()) # 多次调用,只取一次
代码语言:javascript
复制
var once sync.Once
func GetPsmCfgInstance() *PsmCfg {
    once.Do(func() {
        inst = &PsmCfg{}
    })
    return inst
}

yaml 格式检查工具

代码语言:javascript
复制
sudo apt-get install yamllint
pip install yamllint

用法:yamllint 文件名.yml

参考文献

yaml 文件读取工具

代码语言:javascript
复制
pip install shyaml
代码语言:javascript
复制
get-type:获取相应的类型
get-value:获取值
get-values{,-0}:对序列类型来说,获取值列表
keys{,-0}:返回键列表
values{,-0}:返回值列表
key-values,{,-0}:返回键值对
代码语言:javascript
复制
cat struct.yaml | shyaml get-value parameters.iaas
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.02.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Git
  • Go 项目工程组织
  • json 检查工具
  • GoStub, GoMock, GoConvey
  • Govendor
  • Go import
  • syc
  • yaml 格式检查工具
  • yaml 文件读取工具
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档