各种编程语言在处理逻辑编程时,主要有条件语句,选择语句,循环语句这三大部分。在go语言中,这三种语句的语法可能与之前学的编程语言的语法有些差异。现在我们来分别看一下
go语言条件语句if/else用法
先看一下代码
func read() {
const filename = "abc.txt"
//常规操作
//contents,err := ioutil.ReadFile(filename)
//if err != nil {
// fmt.Println(err)
//}else{
// fmt.Printf("%s", contents)
//}
//Go语言在判断语句中的特殊操作
//先执行分号之前的内容,再对分号后的进行判断
if contents,err := ioutil.ReadFile(filename); err!=nil{
fmt.Println(err)
}else {
fmt.Printf("%s\n", contents)
}
//contents相当于if这个block中的局部变量,在外面将无法再被访问。
// fmt.Println(contents)
}
上述函数,我们完成一次文件读取操作。在注释的常规部分,很容易理解。go语言除了条件语句不用加()之外与其它语言处理是一样的。但是
if contents,err := ioutil.ReadFile(filename); err!=nil
我们看一下这样的条件语句,先进行一次赋值,再对已赋值进行判断。虽然看上去反人类。但是能够减少代码冗余。不失为一种改进,但是这种写法还是得慢慢习惯。并且在if语句中定义的变量的作用域只在if模块中,这点需要注意
go语言分支语句switch用法
还是先看代码
func calculate(a,b int,op string) int{
var result int
//每一个case自带break,如果不需要break要加上fallthrough(人性化)
switch op {
case "+":
result = a+b
case "-":
result = a-b
case "*":
result = a*b
case "/":
result = a/b
default:
//panic报错,中断程序的执行
panic("unsupported operator"+op)
}
return result
}
func Grade(score int) string{
g := ""
switch {
case score<60:
g="F"
case score<80:
g="C"
case score<90:
g="B"
case score<=100:
g = "A"
default:
panic(fmt.Sprintf("wrong score:%d",score))
}
return g
}
通过代码我们能发现几点奇怪的地方
- 在go语言的switch中每个case不需要在手动添加break,而是默认含有break,反而不需要break时要加上fallthrough(超级人性化的设计啊。)
- 在go语言中,switch不再需要强制指定分支变量,而是在case中进行变量判断
在switch我们用到panic函数,这是go语言中处理错误的一种方法,可用于打印出错信息并中断程序执行。
go语言循环语句for用法
在go语言中,删掉了 while关键字,所有循环改用for循环单独使用
func loop() int {
sum := 0
for i := 1;i<=100;i++{
sum+=i
}
return sum
}
func convertToBin(n int) string {
result := ""
for ; n>0 ;n/=2{
lsb := n%2
result = strconv.Itoa(lsb)+result
}
return result
}
func printFile(filename string) {
file , err := os.Open(filename)
if err!=nil{
panic(err)
}
scanner := bufio.NewScanner(file)
//省略递增条件,相当于while
for scanner.Scan(){
fmt.Println(scanner.Text())
}
//死循环
//for {
// fmt.Println("die")
//}
}
上述三个函数,以for循环中常用三种实例。首先由1加到100,采用的for循环与其它编程语言wudachabie
在十进制转二进制的函数中,可以看到,我们无须指定初值,只要给出自增条件即可
在循环读取文件中,for完美的替代了while循环,这样使得循环更加简洁易懂。且go语言的死循环非常的简便。众所周知。go语言在高并发上使用死循环超多。所以这样的操作更容易操作。