疯子的自留地

当我老了,也一样写代码.不为别的,只为爱好!

glide get/update时报Error looking for testing解决方案

在使用glide管理go项目依赖包时,一旦我写了测试用例,再使用glide update/glide get xxx时就会出现下面的错误:

[WARN]  Unable to checkout testing
[ERROR] Error looking for testing: Cannot detect VCS
[ERROR] Failed to retrieve a list of test dependencies: Error resolving imports

很纳闷,testing包难道不是官方包?怎么还会说找不到呢?在Github上发现我并不孤单,于是在相关的issue下面回复了下, 后来发现原来是我自己的$GOPATH下面有一个testing的包,而这个包是我几年前初学golang时直接建立的文件夹,bingo,把testing这个文件夹重命名了一下,问题解决. 附上issue上的解决方案:

  1. check GOROOT before GOPATH in dependence.FindPkg (related to issue #577 )
    If there is "testing" project in GOPATH, pkg "testing" will be found in GOPATH success, "testing" and will be inserted into fetching list.

  2. only deal with first path on GOPATH, skip others
    If GOPATH has more than one paths, "GOPATH=/opt/gopkg:/home/someone/goprj" for example, trying to fetch own private project in goprj is strange. We should only fetch and vendor pkgs in first path of GOPATH.

Linux/Mac下设置SSH跳板机

需求

当我们需要登录某一个服务器集群下的某些内网机器时,需要通过该内网中某一个具有外网权限的机器来做跳板机,实现登录到该内网机中.

阅读全文

API返回值设计的一些想法

背景

在用golang做一个mockhttp工具的时候模拟请求公司项目的api时发现用golang将请求结果值解析到struct并通过不同的返回值来判断是否请求成功,比如请求某接口成功时返回值:

{
   "name":"Scofield Peng",
   "age":18
}

失败时返回:

{
   "errcode":200001,
   "errmsg":"server error"
}

咋一看觉得很容易处理嘛,解析成相应的struct,看有没有值,omg,不觉得很累?很麻烦?尤其是像golang的json.UnMarshal()函数,如果接口返回错误时用正确时返回值得struct去解析,你还得判断struct是否为空,如果为空,再用错误时的struct去解析下. 太麻烦了好么!!!

阅读全文

阿里云主机通过Docker安装L2TP

背景

公司业务对接某第三方服务的需要,因为对方服务器白名单机制,需要一个固定IP. 而悲催的是由于公司网络环境无法提供公网IP,只好在外网测试机上面部署一个vpn来进行中转.PPTP因为安全原因现在osx和windows10好像都废弃了,那就直接上l2tp吧!想起以前搭建vpn那累死人的重复劳动,果断使用Docker集装箱.

阅读全文

Linux下查看系统版本号信息的方法

查看Linux内核版本命令:

  1. cat /proc/version
  2. uname -a

查看Linux系统版本的命令:

  1. lsb_release -a,即可列出所有版本信息. 这个命令适用于所有的Linux发行版,包括Redhat、SuSE、Debian…等发行版。
  2. cat /etc/redhat-release, 这种方法只适合Redhat系的Linux:
  3. cat /etc/issue, 此命令也适用于所有的Linux发行版。

Linux修改用户名

killall -u old_name
id old_name
usermod -l new_name old_name
groupmod -n new_name old_name
usermod -d /home/new_name -m new_name
usermod -c "New Full Name" new_name
id new_name

Ubuntu install cairo-dock

sudo add-apt-repository ppa:cairo-dock-team/ppa 
sudo apt-get update

Then if Cairo-Dock is already installed:

sudo apt-get dist-upgrade

else:

sudo apt-get install cairo-dock cairo-dock-plug-ins