Category - go

2016-05-03 13:15:50    411    0    0
这次的golang test 带来的新亮点是,利用golang 的httptest模拟http请求, **从而即使电脑没有联网,依然可以方便地测试http请求.** 我们将会利用一段示例xml代码作为http请求对象,然后请求并解析. 看一眼我们的示例xml代码: ```xml Going Go Programming Golang : https://gith
2016-05-02 23:28:36    255    0    0
在这第二个golang test示例中,将测试多个页面,并且测试多种http状态码. - 首先是请求我的博客首页,我们期望得到的是200状态码 - 然后是请求一个不存在的页面,我们期望得到的是404状态码 - 这段程序可以很灵活地拓展为更多个测试页面,对应更多的状态码 ```go // Sample test to show how to write a basic unit table t
2016-04-29 11:26:35    334    0    0
golang 的单元测试,在了解详细之前,先写一个练练手: 这是测试请求我的博客网站首页: - 如果Get请求成功,得到响应报文,且为200响应,则正常 - 如果Get请求失败,那么可以检测报文和响应代码的情况 ```go // Sample test to show how to write a basic unit test. // golang package name should
2016-04-04 23:18:39    239    0    0
# 环境变量 - **GOROOT**:Go安装包的根目录. // 比如我下载了go安装包以后,放在了/usr/local下,那么就是: ``` anderson@Peacesky:~$ echo $GOROOT /usr/local/go ``` 查看目录结构: ``` anderson@Peacesky:/usr/local$ tree -d -L 1 go go ├── api ├──
go echo    2016-04-04 23:18:39    265    0    0
## 三种实现方法 ### 1. 第一种方式: echo1.go ``` package main import( "fmt" "os" ) func main() { var s, sep string for i := 1; i < len(os.Args); i++ { s += sep + os.Args[i] sep = " " } fmt.Println(s) } ``` ### 2. 第二种方式: echo2.go ``` package main import ( "fmt" "os" ) func main() { s, sep := "", " " for _, arg := range os.Args[1:] { s += sep + arg } fmt.Println(s) } ``` ### 3. 第三种方式: echo3.go ``` package main import ( "fmt" "os" "strings" ) func main() { fmt.Println(strings.Join(os.Args[1:], " ")) } ``` 三种有些差异的方法实现了同一功能. --- 1. **多package声明的简化写法** ``` import ( "fmt" "os" "strings" ) ``` **gofmt** 还会按照字母顺序排列包名. 2. **slice**; os.Args这个变量是一个字符串(string)的slice,与python中的切片类似,是一个简版的动态数组. 3. **for 的语法;** for 语句, while, 以及死循环. ``` for initialization; condition; post { // zero or more statements } // a traditional "while" loop for condition { // ... } // a traditional infinite loop for { // ... } ``` 4. **var 变量的简写** := 符号初始化和赋值 i ,是 var xxx = yyy 的一种简写方式.**Go语言会自动根据等号右边的值的类型,判断左边的值的类型** 5. **自增表达式** i++ 等价与 i += 1, 以及 i = i + 1 对应的还有 i--. 这些在Go语言里是**语句**,而不像C系的其他语言里是**表达式**,所以, - **在Go语言里,j = i++ 是非法的** - **++ 和 --都只能放在变量名后面,因此 --i 也是非法的** 6.**另一种循环的写法** ``` for _, arg := range os.Args[1:] { s += sep + arg sep = " " } ``` 每一次循环迭代,range都会返回一对结果: - 当前迭代的下标 - 该下标处的值 但是在这个例子中,我们不需要下标,但是因为range的处理要求我们必须同时处理下标和值.我们可以: - 在这里声明一个接收index的临时变量来解决这个问题,但是Go语言又不允许声明而后续代码中不适用这个变量,如果你这样做了编译器将会报错; - 使用**空白标识符**,对,就是那个**下划线"_"**.空白标识符可以在任何你接收自己不需要处理的值时使用. 在这里,我们用它来忽略掉range返回的那个没用的下标值. 由于遍历os.Args的下标索引是隐式自动生成的,可以避免因显式更新索引而导致的错误. --- ### 7. **变量声明的多种方法** 以下这些写法都是等价的: ``` s := "" var s string var s = "" var s string = "" ``` - 第一种: 只能用在函数内部,而package级别的变量,禁止用这样的声明方式; - 第二种: