August 20, 2013
mysql中的表锁的优化
"一、获取锁等待情况 可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺: mysql\u0026gt; show status like ‘Table%’; +—————————-+———-+ | Variable_name | Value | +—————————-+———-+ | Table_locks_immediate | 105 | | Table_locks_waited | 3 | +—————————-+———-+ 2 rows in set (0.00 sec)\nTable_locks_immediate 表示立即释放MySQL表锁数, Table_locks_waited 表示需要等待的MySQL表锁数\n如果Table_locks_waited的值比较高,则说明存在着较严重的表级锁争用情况。这时,需要我们对应用做进一步的检查,来确定问题所在。\n可以通过检查Innodb_row_lock状态变量来分析系统上的行锁的争夺情况: mysql\u0026gt; show status like …"
August 12, 2013
golang中结构体的初始化方法的不同用法(new方法)
"自定义一个结构体\ntype Rect struct { x, y float64 width, height float64 } 初始化方法:\nrect1 := new(Rect) rect2 := \u0026amp;Rect{} rect3 := \u0026amp;Rect{0, 0, 100, 200} rect4 := \u0026amp;Rect{width:100, height:200} 注意这几个变量全部为指向Rect结构的指针(指针变量),因为使用了new()函数和\u0026amp;操作符。\n而如果使用方法\na := Rect{} 则表示这个是一个Rect{}结构类型.两者是不一样的.参考代码:\nfunc main() { a := Rect{} a.x = 15 rect1 := \u0026amp;Rect{0, 0, 100, 200} rect1.x = 10 fmt.Printf(\u0026#34;%v\\n%T\\n\u0026#34;, a, a) fmt.Printf(\u0026#34;%v\\n%T\\n\u0026#34;, rect1, rect1) } 运行结果为:\n{15 0 0 0} main.Rect \u0026amp;{10 0 …"
August 11, 2013
golang中的文档管理
"foo.go\n// CopyRight 2013 The Go Author. All Right reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE fifle. /* Package foo implements a set of simple mathematical functions. These comments are for demonstration purpose only. Nothing more. If you have any questions,please don’t hesitate to add yourself to [email protected]. you can alse visit golang.org for full Go documentation."
August 11, 2013
golang中的map数据类型操作实例
"package main import ( \u0026#34;fmt\u0026#34; ) type stu struct { Name string Age int } func main() { // 声明一个map变量student,键名为string,值为stu var student map[string]stu // 给map变量创建值,同时指定最多可以存储5个stu值 student = make(map[string]stu, 5) // map元素赋值 student[\u0026#34;stu1\u0026#34;] = stu{\u0026#34;zhao\u0026#34;, 25} student[\u0026#34;stu2\u0026#34;] = stu{\u0026#34;zhang\u0026#34;, 28} student[\u0026#34;stu3\u0026#34;] = stu{\u0026#34;sun\u0026#34;, 32} student[\u0026#34;stu4\u0026#34;] = stu{\u0026#34;li\u0026#34;, 40} student[\u0026#34;stu5\u0026#34;] = stu{} //上面方式的简写方法 /* student := …"
August 9, 2013
go语言单元测试
"Go本身提供了一套轻量级的测试框架.符合规则的测试代码会在运行测试时被自动识别并执行.单元测试源文件的命名规则如平衡点:在需要测试的包下面创建以”_test”结尾的go文件,开如[^.]*_test.go\nGo单元测试函数分为两在类.功能测试函数和性能测试函数,分别以Test和Benchmark为函数名前缀并以*testing.T 和 *testing.B 为单一参数的函数。\nfunc TestAdd1(t *testing.T) func BenchmarkAdd1(t *testing.T) 测试工具会根据函数中的实际执行动作得到不同的测试结果。\n功能测试函数会根据测试代码执行过程中是否发生错误来反馈结果; 性能测试函数仅仅打印出来测试所花费时间,用来判断程序性能;\n准备 新建一个文件,命名为 go_test.go\npackage go_test import \u0026#34;testing\u0026#34; func Add(a, b int) int { return a + b } 功能测试 在go_test.go文件里添加以下代码\nfunc TestAdd1(t *testing.T) …"
August 8, 2013
Redis配置文件参数说明
"配置文件参数说明:\nRedis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no\n当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定 pidfile /var/run/redis.pid\n指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字 ** port 6379**\n绑定的主机地址 bind 127.0.0.1\n5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能\ntimeout 300\n指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose loglevel verbose\n日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null …"
August 7, 2013
安装hg命令
"在使用golang开发的时候,有些时间github.com上面的包需要执行hg命令(hg命令简介).这个时候就需要安装一下才可以.\nLinux下安装Mercurial(hg):\n安装Mercurial 在进行后面的操作之前需要安装Mercurial( 百科)版本管理系统(可以输出hg名词检测是否安装)。输入以下命令安装:\nsudo easy_install mercurial 对于 Ubuntu/Debian 系统,easy_install 命令可以用\napt-get install python-setuptools python-dev build-essential 安装。 如果上述命令安装失败的话,还可以尝试去官方网站 下载\nWindows下安装\n国内国度网盘下载(32位): http://pan.baidu.com/share/link?shareid=3528053518\u0026amp;uk=2365864479\n(64位): http://pan.baidu.com/share/link?shareid=3560201274\u0026amp;uk=2365864479"
July 23, 2013
exec: “pkg-config”: executable file not found in %PATH% 的解决办法
"在windows下要用 golang 实现操作 zeromq 消息队列,发现在sublime下进行\ngo get -tags zmq_3_x github.com/alecthomas/gozmq\n操作的时候,提示\n# pkg-config –cflags libzmq libzmq libzmq libzmq exec: “pkg-config”: executable file not found in %PATH% exit status 2\n原因是因为没有安装pkg-config.需要手动安装,并设置一下环境变量.pkg-config下载地址: http://ftp.acc.umu.se/pub/gnome/binaries/win32/dependencies/pkg-config_0.23-3_win32.zip ( http://ftp.acc.umu.se/pub/gnome/binaries/win64/dependencies/pkg-config_0.23-2_win64.zip)\n如果无法下载,直接打开所在的目录,找到合适的软件包下载.然后将包里bin目录里 …"
July 23, 2013
用golang发送邮件
"配置文件 conf.json\n{ \u0026#34;Username\u0026#34;: \u0026#34;[email protected]\u0026#34;, \u0026#34;Password\u0026#34;: \u0026#34;123456\u0026#34;, \u0026#34;Smtphost\u0026#34;:\u0026#34;smtp.163.com:25\u0026#34; } 主程序 sendmail.go\npackage main import ( \u0026#34;encoding/json\u0026#34; \u0026#34;fmt\u0026#34; \u0026#34;io\u0026#34; \u0026#34;log\u0026#34; \u0026#34;net/smtp\u0026#34; \u0026#34;os\u0026#34; \u0026#34;strings\u0026#34; ) type cfgmail struct { Username string Password string Smtphost string } type cfg struct { Name, Text string } func main() { // 从json文件中读取发送邮件服务器配置信息 cfgjson := getConf() var cfg cfgmail dec := …"
July 14, 2013
nginx日志切割
"nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。\n第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。\n第二步向nginx主进程发送USR1信号。\nnginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。\n重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。\n工作进程立刻打开新的日志文件并关闭重名名的日志文件。\n然后你就可以处理旧的日志文件了。\nnginx日志按日期自动切割脚本如下 [shell] #nginx日志切割脚本 #author: http://www.nginx.cn #!/bin/bash #设置日志文件存放目录 logs_path=\u0026quot;/usr/local/nginx/logs/\u0026quot; #设 …"