莫一哲

折磨我的老腰啊,可是这个小家伙依然没有出来的意思 2018-09-13 19:40 by fifsky

快速将当前目录加入到GOPATH

编辑 `vim ~/.zshrc` 将下面代码添加到底部,即可在命令行快速切换当前目录为GOPATH目录`gop`查看当前GOPATH,`gop a`设置当前目录为GOPATH

 function gop(){
case $1 in
 a )
     currpath=`pwd`
        if [[ -d "$currpath/src" ]];then
            export GOPATH=${GOPATH%%:*}:`pwd`
            echo current ${GOPATH}
        else
            echo "dir not fund src"
        fi
 ;;
 * )
     echo current ${GOPATH}
esac
}
alias gop='gop'

ngrok证书错误

最近项目里面需要用到ngrok代理本地vnc实现远程协助功能,于是要在服务器搭建一个ngrok server并且编译一个windows i386的ngrok client,但是编译后的程序连接server的时候始终提示证书错误

 [WARN] [tun:15dd7522] Failed to read message: remote error: bad certificate

但是我仔细核对了证书域名,并且重新编译了多次依旧有问题,参见文章

http://tonybai.com/2015/03/14/selfhost-ngrok-service/

http://www.haiyun.me/archives/1012.html


最后实在没办法,发现ngrok客户端有日志参数-log=log.txt,发现一个证书过期的错误,后来发现是自己XP的虚拟机的时间和当前时间不同步了,调整为当前时间之后即可,记录在这里希望对遇到同样问题的人有所帮助,另附加一个windows下ngrok后台执行的命令


 start /b ./ngrok -config=ngrok.cfg -log=stdout -log-level=WARNING start vnc > ngrok.log 2>&1


go对URL参数的处理类似PHP(http_build_query)

开始用GO写一些小代码,还是无法摆脱PHP的固定思维,在请求接口的时候php很容易就想到了http_build_query,到了GO里面就不知道改怎么处理了,特别是GO的强类型,处理起来异常痛苦,今天看到文章发现我自己实现的方式太山寨了,贴一下标准做法和山寨做法,如果你有什么更好的方式,欢迎交流


 func HttpBuildQuery(params map[string]string) (param_str string) {

	params_arr := make([]string, 0, len(params))

	for k, v := range params {
		params_arr = append(params_arr, fmt.Sprintf("%s=%s", k, v))
	}

	//fmt.Println(params_arr)

	param_str = strings.Join(params_arr, "&")
	return param_str
}


func main(){
	params := map[string]string{
		"action":        "getAccessToken",
		"client_code":   "aaaaa",
		"client_secret":  "ccccc",
		"interface":     "wxapi",
		"time":          strconv.FormatInt(time.Now().Unix(), 10),
	}
       
	param_str := HttpBuildQuery(params)

}
标准做法如下
 params := map[string]string{
		"action":        "getAccessToken",
		"client_code":   "aaaa",
		"client_secret": "cccc",
		"interface":     "wxapi",
		"time":          strconv.FormatInt(time.Now().Unix(), 10),
	}

	u, _ := url.Parse("")

	q := u.Query()

	q.Set("action", "getAccessToken")
	q.Set("client_code", clientCode)
	q.Set("client_secret", clientSecret)
	q.Set("interface", "wxapi")
	q.Set("refresh", refresh)
	q.Set("time", strconv.FormatInt(time.Now().Unix(), 10))

	u.RawQuery = q.Encode() 
        fmt.Printf(u.String())  

----------------------------------分割线---------------------------------

发现GO的net/url包很强大,基本可以实现PHP对URL处理的所有功能,最新的处理方法如下

 //url.Values{} //实例化Values结构 我们看到了Values 是一个map[string][]string结构,所以其实实例化可以这样
	c := url.Values{"method": {"show", "aaaa"}, "id": {"1"}}
	fmt.Println(c.Encode())


Vagrant中nginx服务器JS/CSS文件输出乱码

刚开是在mac下用Vagrant的centos开发时遇到过一个问题,JS和CSS文件里面会出现奇特的乱码字符,从而导致JS错误,当时查了很多资料,走了很多弯路,最后在GitHub找到一个正确答案,今天突然想起来,顺便记录一下

在nginx配置文件中加上


sendfile off;
重启nginx就正常了


Can't create test file /home/mysql/dev01.lower-test

由于迁移mysql数据库目录到磁盘的/home分区,完成之后重启mysql提示这个错误(141107 16:43:38 [Warning] Can't create test file /home/mysql/dev01.lower-test),权限都是mysql肯定不会有错,在网上找到一篇文章,解决了这个问题

编辑 /etc/apparmor.d/usr.sbin.mysqld 文件,可以看到

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
添加新的/home/mysql目录如下
/home/mysql/ r,
/home/mysql/** rwk,
保存,重启apparmor,/etc/inid.d/apparmor restart

然后就可以启动mysql了

mysql大数据量order by导致速度变慢

最近处理一个3700W的数据,其中一个字段使用的全文检索,索引比较大达到5G,测试的时候还挺快的,放到服务器之后变慢了,一开始以为是索引出问题(因为服务器的索引文件MDI是直接从本地拷贝到服务器的),后来发现本地也变慢了,对sql分析之后发现问题,一开始我测试的时候SQL是不加order by的如


SELECT * FROM yuliao WHERE MATCH(split_content) 
AGAINST ('我们' IN BOOLEAN MODE) limit 100


速度很快基本是毫秒级别,后来画蛇添足加了order by之后


SELECT * FROM yuliao WHERE MATCH(split_content) 
AGAINST ('我们' IN BOOLEAN MODE) order by id asc limit 100


这下居然需要21秒了,explain一下发现Using where; Using filesort,走的是fulltext的全文检索,并对内容重新排序,错就错在为毛要对结果集重新排序呢?,为毛不走id主键索引?这个需求为毛尚且可以去除order by id asc,因为默认就是走主键索引的,但是如果需求是需要order by id desc呢,测试表明同样很慢,目前只想到强制走id索引的方法解决,如下


SELECT * FROM yuliao force index(primary) WHERE MATCH(split_content) 
AGAINST ('我们' IN BOOLEAN MODE) order by id desc limit 100


如果你有更好的方案,欢迎留言讨论


  • 1
返回顶部