• Golang 基础 02 -- 运算符及控制语句


    注意事项

    运算符

    tips

    • Go中的运算符都是从左到右结合的
    • 优先级从高到低:
      这里写图片描述

    移位运算

    a << 10
    //a*(2^10)
    //右移类似
    

    位运算符

    /*
    6 : 0110
    11: 1011
    
    
    ----------
    
    
    &   0010
    |   1111
    ^   1101
    &^  0100 
    //第四个运算符是,第二行这一位如果是1,就上0,如果是0,就上第一行该位置的数
    */
    

    运算符&&和||

    • &&如果第一个不符合,就不会计算第二个表达式
    • II同理如果第一个符合了,就不会去计算第二个表达式

    指针

    • Go中虽然保留了指针,但是不支持指针运算以及"->"运算符,直接采用"."来操作指针目标对象成员
    • 操作符"&"去变量地址,使用"*"通过指针间接访问目标对象
    • 默认值是nil,不是NULL
      递增递减语句
    • 在Go中,++与--作为语句而不是表达式
    • 表达式是可以放在等号右边的,语句不可以
    • 而且 --a 是不可以的,a-- 才行

    控制语句

    判断语句if

    • 不加括号,一个空格就行
    • 可以加一个局部变量的初始化,定义域只在if语句中
      if a:=1 ; a>0 { }
    • 左大括号必须和if语句在同一行

    循环语句for

    • 只有for一个循环语句关键字,但是支持三种形式
    • 左大括号要和for关键字在同一行
    • 初始化和步进表达式可以是多个值
    • 条件语句每次都会被检查,故不建议在条件语句中使用函数,尽量提前计算好条件,并用变量或者向量代替
    func main(){
    	a := 1
    	for {
    		a++
    		if a>3 {
    			break;
    		}
    	}
    //do...while型
    }
    
    func main(){
    	a := 1
    	for a<=3 {
    		a++
    	}
    //while型
    }
    
    func main(){
    	a := 1
    	b := "string"
    	l := len(b)
    	for i := 0; i<l ; i++{
    		a++
    	}
    //for型
    }
    

    选择语句switch

    • 左大括号必须与switch在一行
    • case后面的条件语句可以是任何类型或者表达式
    • 不需要写break,一旦符合条件就会自动终止,如果想继续执行下一个case,需要加上 fallthrough 语句
    • switch后面可以加一个初始化表达式,要加分号,如果只是单纯的变量名,不用加分号
    func main(){
    	a := 1
    	switch a {
    	case 0:
    		fmt.Println("a=0")
    	case 1:
    		fmt.Println("a=1")
    	default:
    		fmt.Println("nothing")
    	}
    	fmt.Println(a)
    }
    //a=1
    //1
    
    func main(){
    	a := 1
    	switch {
    	case a>=0:
    		fmt.Println("a=0")
    		fallthrough
    	case a>=1:
    		fmt.Println("a=1")
    	default:
    		fmt.Println("nothing")
    	}
    	fmt.Println(a)
    }
    /*
    a=0
    a=1
    1
    */
    
    func main(){
    	a := 6
    	switch a := 0; {
    	case a>=0:
    		fmt.Println("a=",a)
    		a++
    		fallthrough
    	case a>=1:
    		fmt.Println("a=",a)
    	default:
    		fmt.Println("nothing")
    	}
    	fmt.Println(a)
    }
    /*
    a= 0
    a= 1
    6
    */
    

    跳转语句goto, break, continue

    • 三个语法都可以配合标签使用
    • 标签名区分大小写,若不使用会造成编译错误
    • break和continue配合标签可以用于多层循环的跳出,如果没有用标签,就是正常的作用
    • goto是调整执行位置,与其他两个语句配合标签的结果并不一样
    func main(){
    LABEL1:
    	for {
    		for i:=0 ; i< 10 ;i++ {
    			if i>3 {
    				break LABEL1
    				//continue LABEL1  死循环
    				//goto LABEL1  重新执行这个大循环
    			}
    		}
    	}
    }
    
  • 相关阅读:
    struct 结构体解析(原)
    C++标准编程:虚函数与内联
    基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现
    直接用编译器按ctrl+F5运行和双击运行结果不一样
    驱动编译的时候注意编译工程选项
    驱动编译的时候注意编译工程选项
    'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序
    'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序
    NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程
    NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程
  • 原文地址:https://www.cnblogs.com/leafs99/p/golang_basic_02.html
Copyright © 2020-2023  润新知