Git 常用命令详解(二)

Git Community Book 中文版

Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro

Git 的更多介绍,请参考我的上一篇博客:Git 版本管理工具

一、 Git 命令初识

在正式介绍Git命令之前,先介绍一下Git 的基本命令和操作,对Git命令有一个总体的认识

示例:从Git 版本库的初始化,通常有两种方式:

1)git clone:这是一种较为简单的初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一份

例如:git  clone  git://github.com/someone/some_project.git   some_project

上面的命令就是将'git://github.com/someone/some_project.git'这个URL地址的远程版本库,完全克隆到本地some_project目录下 Continue reading

使用php中的反射,定位函数所在位置

用反射,比如想知道函数hello是哪个文件里的哪行定义的:

$obj = new ReflectionFunction("hello");
$file = $obj->getFileName();
$line = $obj->getStartLine();

关于php中的反射请参考官方手册:http://www.php.net/manual/zh/book.reflection.php

mysql中的表锁的优化

一、获取锁等待情况

可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺:
mysql> show status like 'Table%';
+----------------------------+----------+
| Variable_name       | Value |
+----------------------------+----------+
| Table_locks_immediate   | 105       |
| Table_locks_waited  | 3     |
+----------------------------+----------+
2 rows in set (0.00 sec)

Table_locks_immediate 表示立即释放MySQL表锁数,
Table_locks_waited 表示需要等待的MySQL表锁数
如果Table_locks_waited的值比较高,则说明存在着较严重的表级锁争用情况。这时,需要我们对应用做进一步的检查,来确定问题所在。

可以通过检查Innodb_row_lock状态变量来分析系统上的行锁的争夺情况:
mysql> show status like 'innodb_row_lock%';
+----------------------------------------+----------+
| Variable_name               | Value |
+----------------------------------------+----------+
| Innodb_row_lock_current_waits   | 0     |
| Innodb_row_lock_time            | 2001  |
| Innodb_row_lock_time_avg        | 667       |
| Innodb_row_lock_time_max    | 845       |
| Innodb_row_lock_waits       | 3     |
+----------------------------------------+----------+
5 rows in set (0.00 sec)
Continue reading

动态执行ajax请求里的js代码

index.html

<script src="/js/jquery.js"></script>
<script>
function evalScript(html) {
// var html = response.responseText;
var hd = document.getElementsByTagName("head")[0];
var re = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;
var srcRe = /\ssrc=([\'\"])(.*?)\1/i;
var typeRe = /\stype=([\'\"])(.*?)\1/i;
var match;
while(match = re.exec(html)){
var attrs = match[1];
var srcMatch = attrs ? attrs.match(srcRe) : false;
if(srcMatch && srcMatch[2]){
var s = document.createElement("script");
s.src = srcMatch[2];
var typeMatch = attrs.match(typeRe);
if(typeMatch && typeMatch[2]){
s.type = typeMatch[2];
}
hd.appendChild(s);
}else if(match[2] && match[2].length > 0){
if(window.execScript) {
window.execScript(match[2]);
} else {
window.eval(match[2]);
}
}
}
}

$(function(){
$.get('b.html',{},function(html){
evalScript(html);
alert(sysmsg);
})
})
</script>

ajax.html

<script type="text/javascript" src="test.js"></script><script type="text/javascript" src="ts.js"></script>
<script type="text/javascript">// <![CDATA[
alert('aaaa');
// ]]></script>
<script type="text/javascript">// <![CDATA[
var sysmsg = '1';
// ]]></script>

golang test说明解读

go test是go语言自带的测试工具,其中包含的是两类,单元测试和性能测试

通过go help test可以看到go test的使用说明:

格式形如:

go test [-c] [-i] [build flags] [packages] [flags for test binary]

参数解读:

-c : 编译go test成为可执行的二进制文件,但是不运行测试。

-i : 安装测试包依赖的package,但是不运行测试。

关于build flags,调用go help build,这些是编译运行过程中需要使用到的参数,一般设置为空 Continue reading

golang中的文档管理

foo.go

// 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
golang-uns@googlegroups.com.

you can alse visit golang.org for full Go documentation.
*/

package foo

import (
	"fmt"
)

// Foo compares the two input values and retrens the larger
// Value, If the two values are equal, return 0.
func Foo(a, b int) (ret int, err error) {
	if a > b {
		return a, nil
	} else {
		return b, nil
	}

	return 0, nil
}

// BUG(jack): #1: i'm sorry but this code has an issue to be solved.

// BUG(tom): #2: An issue assigned to anothoer person.

生成文档摘要

go doc foo.go
PACKAGE DOCUMENTATION
	
	package foo
	    import "D:\gotest\src"
	
	
	
	FUNCTIONS
	
	func Foo(a, b int) (ret int, err error)
	    Foo compares the two input values and retrens the larger Value, If the
	    two values are equal, return 0.
	
	
	
	BUGS
	
	   #1: i'm sorry but this code has an issue to be solved.
	
	   #2: An issue assigned to anothoer person.

为了方便查看,也可以通过浏览器查看

godoc -http=:9090

然后输入 http://localhost:9090/pkg/foo 即可

golang中的map数据类型操作实例


package main

import (
 "fmt"
)

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["stu1"] = stu{"zhao", 25}
 student["stu2"] = stu{"zhang", 28}
 student["stu3"] = stu{"sun", 32}
 student["stu4"] = stu{"li", 40}
 student["stu5"] = stu{}

//上面方式的简写方法
 /* 
student := map[string]stu{
 "stu1": stu{"zhao", 25},
 "stu2": stu{"zhang", 28},
 "stu3": stu{"sun", 32},
 "stu4": stu{"li", 40},
 "stu5": stu{},
 }
*/

//打印map信息
 fmt.Printf("%v\n", student)

//查询一个map值
 s1, ok := student["stu2"]
 if ok {
 fmt.Println("Found stu2, Name:", s1.Name)
 } else {
 fmt.Println("Not Found stu2")
 }

//删除一个map值,如果stu2不存在,则什么也不会发生,但如果传入的map变量的值为nil的话,则会抛出一个 panic 异常
 delete(student, "stu2")

fmt.Printf("%v\n", student)

}

执行结果如下:

go run map.go
[ `go run map.go` | done: 2.3907474s ]
	map[stu1:{zhao 25} stu2:{zhang 28} stu3:{sun 32} stu4:{li 40} stu5:{ 0}]
	Found stu2, Name: zhang
	map[stu1:{zhao 25} stu3:{sun 32} stu4:{li 40} stu5:{ 0}]

go语言单元测试

Go本身提供了一套轻量级的测试框架.符合规则的测试代码会在运行测试时被自动识别并执行.单元测试源文件的命名规则如平衡点:在需要测试的包下面创建以"_test"结尾的go文件,开如[^.]*_test.go

Go单元测试函数分为两在类.功能测试函数性能测试函数,分别以TestBenchmark为函数名前缀并以*testing.T 和 *testing.B 为单一参数的函数.下面是测试函数声明的例子.

func TestAdd1(t *testing.T)
func BenchmarkAdd1(t *testing.T)

测试工具会根据函数中的实际执行动作得到不同的测试结果.功能测试函数会根据测试代码执行过程中是否发生错误来反圆满同的结果,而性能测试函数仅仅打印整个测试过程的花费时间. Continue reading