GO学习笔记——运算符、程序流程控制特殊说明(对比C语言)

一、运算符在Go中的特殊说明

Golang中运算符使用和C、Java差别不大,唯一需要注意的是,自增自减运算符(“++”,“--”)只能作为独立语言使用,具体示例如下:

package main
import "fmt"

func main(){
    var i int = 0
    i++    //单独成行,不可成为其他语句的组成
    i--

    var a int 
    a = i++    //错误,自增语句只能独立使用
    a = i--    //错误,自减语句只能独立使用

    if i++ > 0 {    //错误,同样,不能作为条件判断的某一比较项
        fmt.Println("i=",i)
    }

}

更重要的是,在Golang中,++、--只能够写在变量的后面,不能写在变量的前面,不存在++i,--i的写法,设计者的目的是为了强制让Golang更加简洁,统一。

另外,Golang中是没有三元运算符A?B:C的,其具体效果通过if实现。

同样的,算符的优先级与C语言类似。

附:Golang中各类常见运算符:算术运算符、关系运算符、逻辑运算符、位运算符

算数运算符
运算符运算范例结果
+正号+33
-负号-2-2
+4+15
-4-13
*4*28
/10/52
%取模7%52
++自增

a=2

a++

a=3
--自减

a=2

a--

a=1
+字符串相加"Wel"+"come""Welcome"
关系运算符
运算符运算范例结果
==相等于4==3false
!=不等于4!=3true
<小于4<3false
>大于4>3true
<=小于等于4<=3false
>=大于等于4>=3true
逻辑运算符
运算符描述实例(A为True,B为False)
&&逻辑与,短路与(A&&B)为False
||逻辑或,短路或(A||B)为True
!逻辑非!A为False
位运算符
运算符描述
&按位与,将参与运算的两数对应二进制位相与
|按位或,将参与运算的两数对应二进制位相或
^按位异或,将参与运算的两数对应二进制位相异或
<<

左移,例:a<<x,将a左移x位,高位丢弃,低位补0

>>右移,例:a>>x,将a右移x位,低位丢弃,高位补0
赋值运算符
运算符描述实例
=赋值运算C = A+B
+=相加后赋值C += A 相当于C = C + A
-=相减后赋值C -= A 相当于 C = C - A
*=相乘后赋值C *= A 相当于 C = C * A
/=相除后赋值C /= A 相当于 C = C / A
%=求余后赋值C %= A 相当于 C = C % A
<<=左移后赋值

C <<= 2 相当于 C = C << 2

>>=右移后赋值C  >>= 2 相当于 C = C >> 2
&=按位与后赋值C &= 2 相当于 C = C & 2
^=按位异或后赋值C ^= 2 相当于 C = C ^ 2
|=按位或后赋值C |= 2 相当于 C = C | 2
其他运算符
运算符描述实例
&返回变量存储地址,取地址符&a;给出变量a的实际地址
*指针变量

*a;是一个指针变量


二、程序流程控制在GO中的特殊说明

Golang中没有while和do…while!!!!!!

与C语言的流程控制语句类似,Golang中有if、else、switch、case、goto、for、break、continue等流程控制语句,但是,Golang中没有while和do…while!!!!!!(可以用for循环和break跳转语句来实现相应效果)


1、Go中的if,if…else

if条件表达式外不用加括号,用空格与其他词语隔开。if…else控制的代码块一定要用花括号括住,不能省略,并且else必须紧接在反花括号后,不能够换行,其余使用方法与C类似。另外,可以在条件表达式里进行变量的定义

语法示例如下:

if 条件表达式A {

        //执行语句

} else if 条件表达式B {

        //执行语句

} else {

        //执行语句

}

//没有括号、else紧跟花括号不换行

定义变量实例:

if age := 20; age > 18{
    //执行语句
}

golang支持在if中直接定义一个变量


2、Go中的switch…case

喜报,喜报,case分支后不需要再加break了!!!

其余和if一样,表达式不需要用括号括住了,用空格隔开,并且支持case里有多个表达式,用逗号隔开,switch后面也可以不带表达式,类似if…else分支使用。

switch 表达式{

        case 表达式1,表达式2,…:

                //执行语句

        case 表达式3,表达式4,…:

                //执行语句

        ……

        default:

                //执行语句

}

还存在switch穿透(fallthrough),如果在case语句后面加上fallthrough,则执行完该case还会继续执行下一个case,叫做switch穿透,但默认只能穿透一层。可以尝试如下代码:

var i int = 10
switch i {
    case 10:
        fmt.Println("case1")
        fallthrough
    case 20:
        fmt.Println("case2")
    case 30:
        fmt.Println("case3")
    default:
        fmt.Println("no case")
}

另外,switch还能够用于type…switch来判断某个interface变量中实际指向的变量类型,可以尝试如下代码。

var x interface{}
var y = 10.0
x = y

switch i := x.(type){
    case nil:
        fmt.Printf("x 的类型是:%T",i)
    case int:
        fmt.Printf("x 的类型是int")
    case float64:
        fmt.Printf("x 的类型是float64")
    case func(int) float64:
        fmt.Printf("x 的类型是func(int)")
    case bool,string:
        fmt.Printf("x 的类型是bool或string")
    default:
        fmt.Printf("x 的类型未知")
}

3、Go中的for循环

Go中for循环有三种使用方式,其格式分别如下:

第一种:

for 循环变量初始化; 循环条件; 循环变量迭代{

        //循环执行语句

}

示例如下:

for i:= 1; i <= 10; i++{
    fmt.Println(i);
}

第二种:

for 循环判断条件{

         //循环执行语句

}

示例如下:

j := 1
for j<=10{
    fmt.Println(j)
    j++
}

 第三种:
for {

        //循环执行语句

}

示例如下:

k := 1
for {
    if k <=10 {
        fmt.Println(k)
    }else{
        break
    }
    k++
}

这种用法可以用于实现do…while和while循环操作,因为这两个循环关键词在Go中是没有的,具体实现效果见后文。

另外,Golang提供for-range方式,用于方便遍历字符串和数组,以下为字符串遍历方式:

str = "Hi bro!"
for index, val := range str{
    fmt.Printf("index=%d,val=%c \n", index, var)
}

 因为Golang中是不存在while和do…while关键字的,故用for循环来实现while和do…while

//while循环

for{

        if 循环条件表达式{

                break // 跳出for循环

        }

        //循环执行语句

        //循环变量迭代

}

//do…while循环

for{

        //循环操作(语句)

        //循环变量迭代

        if 循环条件表达式{

                break;//跳出for循环

        }

}


其余的关于break、continue以及goto的用法与C语言类似,break同样是结束当前循环体,continue同样是直接跳转下一次循环,goto同样不推荐使用,故不做赘述。

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值