测试开发学习:go入门及其命令式编程
学习目标:
两周掌握go的基本语法及简单使用学习内容:
1、 了解go语言
2、 学习go语言的声明
3、 学习go语言的循环
4、 学习go语言的变量作用域
学习时间:
5.5日-5.6日下午/晚上1 了解go语言
1.1 go语言介绍
Go是一门开源编程语言,使用它可以大规模地生产出简单、高效且可信赖的软件。
- 简单 :为java等传统语言死板的数据结构提供了轻量级的替代品;
- 高效:编译迅速;
- 可信赖:排除了可能会导致歧义的特性;
1.2 包和函数
package main
import (
"fmt"
)
func main () {
fmt.Println("Hello,playground")
}
总结:
- package关键字声明了代码所属包。
- import关键字导入自己将要用到的包。
- func关键字用于声明函数。每个函数的体(body)都需要使用“{}”包围,运行一个go程序时,总是从main包的main函数开始运行。
- fmt包提供了用于格式化输入和输出的函数,每次需要用到被导入包中的函数时,都需要使用“包名.函数”的格式。
注:“{”必须与func关键字位于同一行,“}”独占一行,这是go唯一允许的大括号放置风格。这是由于编译器将自动为代码插入分号,如果放置位置错误,则将会插入到错误的位置。
2 学习go语言的声明
2.1 执行计算(+ - * / %)
//计算程序示例
package main
//只导入单个包时可以省略“()”
import “fmt”
func main () {
fmt.Print("My weight is")
fmt.Print(149.0 * 0.3783)
fmt.Print("1bs,and I would be")
fmt.Print(41 * 365 / 687)
fmt.Print(" years old ")
}
总结:
- "//"代表该行注释。
- fmt包中的Print函数不存在换行功能.
- fmt包中的Println函数有换行功能,连接不同字符串、数值或者数学表达式以“,”相隔。
2.2 格式化输出(Printf用法)
示例一:
fmt.Printf("I would be %v years old.\n",41*365/687)
示例二:
fmt.Printf("%-15v $%4v\n","SpaceX",94)
//程序打印结果
SpaceX $ 94
总结:
- fmt包中的Printf函数同样不存在换行功能,可以通过在文本中加入换行符“\n”来将输出内容推进至下一行。
- 该函数接受的第一个参数总是文本,第二个参数则是表达式,文本中包含的“%v”则会在之后被替换成表达式的值。
- "%4v"表示将文本的宽度增加为4个字符,宽度为正,空格填充在文本左侧,宽度为负,空格填充在文本右侧。
2.3 常量和变量
总结:
- const 关键字声明常量,声明常量并赋值之后,在之后的使用过程中不可赋予新值,其也不可以使用函数调用的结果作为值。
- var 关键字声明变量,变量必须先声明才能使用。
- var可以利用"()"一次声明多个变量,也可以用逗号隔开声明,如下示例。
var (
distance = 56000000
speed = 100800
)
var distance,speed = 5600000,100800
- 增量操作符“a++ ,a*=3,…”同java操作类似,但其不支持“++a”等前置增量操作。
2.4 生成伪随机数
package main
import (
"fmt"
"math/rand"
)
func main () {
var num = rand.Intn(10) + 1
fmt.Println(num)
num = rand.Intn(10)+1
fmt.Println(num)
}
总结:
- rand.Intn(10)生成0-9的随机数,+1是为了生成1-10的随机数。
3 学习go语言的循环
3.1 布尔值的定义
在Go中,true是唯一的真值,而false是唯一的假值,相较于Python中将空文本或“”看作“假”,Ruby语言则将其看作真的特性,Go的这种特性更加能够消除歧义。
var command = “Walk outside”
var exit = strings.Contains(command,"outside")
如上述代码,如果command变量中包含“outside”,那么将赋值“true”给exit,反之则赋值“false”。
3.2 if switch进行分支判断
1.if示例:
if 条件1{
…
}else if 条件2{
…
}else{
…
}
总结:与java不同,if的判断条件不会用()括起来,而是直接写在if之后
2.逻辑运算符:
逻辑或:||
逻辑与:&&
逻辑非:!
总结:与java类似,Go也采用短路逻辑,其优点是可以节省时间。
3.switch示例:
var room = "lake"
//switch room{
switch{
case room == "cave":
fmt.Println("You find yourself in a dimly lit cavern")
case room == "lake":
fmt.Println("The ice seems soild enough.")
fall through
case room == "underwater":
fmt.Println("The water is freezing cold.")
}
//输出结果
The ice seems solid enough.
The water is freezing cold.
总结:
- switch 后的条件可以接受文本或数字.
- switch 后面不接room时,即switch{ 时,如上述代码,其比较表达式可以放在分支内,就是room==“cave”,也可以就是 case “cave”:,但此时room要放在switch后面,switch room{ 。
- switch中的fall through 关键字,用于执行下一个分支的代码,即使条件判断不成功,下一个分支内的代码也会被执行。
- switch中的default关键字,其他分支都不满足时,执行该分支内的代码体。
3.3 使用循环重复执行
1.利用for进行有限循环
var count = 10
for count > 0 {
fmt.Println(count)
count--
}
2.利用for进行无限循环
for{
if rand.Intn(2) == 0{
break
}
}
4 学习go语言的变量作用域
Go的作用域通常会随着{ }的出现而开启和结束,一旦某个变量脱离作用域,便不再可见。变量作用域的好处是可以在多个位置使用相同的变量而不会引发冲突,且编程时仅考虑当前作用域即可。
4.1 简短声明
1.简短声明:在for中的应用
//两者等价,都可以声明变量
var count = 10
count := 10
//不使用简短声明,count作用域在main内
var count = 0
for count= 10;count > 0;count--{
...
}
//使用简短声明,count作用域在for循环内,循环消失,该变量脱离作用域
for count := 10;count > 0;count--{
...
}
2.简短声明:在if中的应用
//if语句结束,num变量脱离if作用域
if num:= rand.Intn(3);num==0{
…
}else if 条件2{
…
}else{
…
}
//格式
if 声明;条件{
}
3.简短声明:在switch中的应用
//格式
switch num:= rand.Intn(3);num{
…
}
总结:
- 包作用域在声明变量时不允许使用简短声明
- switch中每个case和default后也有单独的作用域