Go语言运算符

Go 语言内置的运算符有:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符。

算术运算符

运算符描述

+

相加

-

相减

*

相乘

/

相除

%

求余

++

自增

--

自减

关系运算符

运算符描述

==

检查两个值是否相等,如果相等返回 True 否则返回 False。

!=

检查两个值是否不相等,如果不相等返回 True 否则返回 False。

>

检查左边值是否大于右边值,如果是返回 True 否则返回 False。

<

检查左边值是否小于右边值,如果是返回 True 否则返回 False。

>=

检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。

<=

检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。

逻辑运算符

运算符描述

&&

逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。

||

逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。

!

逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。

位运算符

运算符描述

&

按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。

|

按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或。

^

按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。

<<

左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。

>>

右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。

赋值运算符

运算符描述

=

简单的赋值运算符,将一个表达式的值赋给一个左值

+=

相加后再赋值

-=

相减后再赋值

*=

相乘后再赋值

/=

相除后再赋值

%=

求余后再赋值

<<=

左移后赋值

>>=

右移后赋值

&=

按位与后赋值

^=

按位异或后赋值

|=

按位或后赋值

其他运算符

运算符描述

&

取地址符,返回变量存储地址

*

取值符,返回指针的变量

运算符优先级

有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

优先级运算符

7

^ !

6

* / % << >> & &^

5

+ - | ^

4

== != < <= >= >

3

<-

2

&&

1

||

特殊标识符

“_”是特殊标识符,又称占位符(空标识符号),用来忽略结果。

1、特殊标识符应用在import中

在Go语言里,import的作用是导入其他package。

特殊标识符(如:import _ oldboy/golang)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。即使用(import _ 包路径)只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。

示例:

代码目录结构

src 
|
+--- main.go            
|
+--- oldboy
       |
        +--- oldboy.go

main.go

package main

import _ "./oldboy"

func main() {
    // oldboy.Print() 
    //编译报错:./main.go:6:5: undefined: oldboy
}

oldboy.go

package oldboy

import "fmt"

func init() {
    fmt.Println("The old boy welcomes you.")
}

func Print() {
    fmt.Println("Hello!")
}

运行结果:

The old boy welcomes you.

2、特殊标识符应用在代码中

package main

func main() {
    str, _ := oldboy()
    _ = str
}

func oldboy() (str string, err error) {
    str = "The old boy welcomes you."
    err = nil
    return
}

解释:

占位符,意思是那个位置本应赋给某个值,但是咱们不需要这个值。所以就把该值赋给占位符,意思是丢掉不要。这样编译器可以更好的优化,任何类型的单个值都可以丢给占位符。

第一个占位符:这种情况是忽略函数返回值,函数返回两个结果,而你只想要一个结果。

第二个占位符:这种情况是忽略未使用的局部变量,如果声明的局部变量,不使用,编译器是会报错。