运算符用于在程序运行时执行数学或逻辑运算。

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()函数,所以无法通过包名来调用包中的其他函数。

示例:

代码目录结构
  1. |
  2. +--- main.go            
  3. |
  4. +--- oldboy
  5.         |
  6.         +--- oldboy.go
复制代码
main.go
  1. package main

  2. import _ "./oldboy"

  3. func main() {
  4.     // oldboy.Print()
  5.     //编译报错:./main.go:6:5: undefined: oldboy
  6. }
复制代码
oldboy.go
  1. package oldboy

  2. import "fmt"

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

  6. func Print() {
  7.     fmt.Println("Hello!")
  8. }
复制代码
运行结果:
  1. The old boy welcomes you.
复制代码
2. 特殊标识符应用在代码中
  1. package main

  2. func main() {
  3.     str, _ := oldboy()
  4.     _ = str
  5. }

  6. func oldboy() (str string, err error) {
  7.     str = "The old boy welcomes you."
  8.     err = nil
  9.     return
  10. }
复制代码
解释:

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

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

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

回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.