关键词:
Go 语言内置的运算符有:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
算术运算符
运算符 | 描述 |
+ | 相加 |
- | 相减 |
* | 相乘 |
/ | 相除 |
% | 求余 |
注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。
实例
package main
import "fmt"
func main()
a := 100
b := 10
fmt.Printf("(a + b): %v\\n", (a + b))
fmt.Printf("(a - b): %v\\n", (a - b))
fmt.Printf("(a * b): %v\\n", (a * b))
fmt.Printf("(a / b): %v\\n", (a / b))
fmt.Printf("(a %% b): %v\\n", (a % b))
a++
fmt.Printf("a: %v\\n", a)
b--
fmt.Printf("b: %v\\n", b)
运行结果
[Running] go run "/Users/guoliang/Desktop/test.go"
(a + b): 110
(a - b): 90
(a * b): 1000
(a / b): 10
(a % b): 0
a: 101
b: 9
关系运算符
运算符 | 描述 |
== | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |
!= | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |
> | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 |
>= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |
< | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |
<= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |
实例
package main
import "fmt"
func main()
a := 1
b := 2
fmt.Printf("(a > b): %v\\n", (a > b))
fmt.Printf("(a < b): %v\\n", (a < b))
fmt.Printf("(a >= b): %v\\n", (a >= b))
fmt.Printf("(a <= b): %v\\n", (a <= b))
fmt.Printf("(a == b): %v\\n", (a == b))
fmt.Printf("(a != b): %v\\n", (a != b))
运行结果
[Running] go run "/Users/guoliang/Desktop/test.go"
(a > b): false
(a < b): true
(a >= b): false
(a <= b): true
(a == b): false
(a != b): true
逻辑运算符
运算符 | 描述 |
&& | 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。 |
|| | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。 |
! | 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。 |
实例
package main
import "fmt"
func main()
a := true
b := false
fmt.Printf("(a && b): %v\\n", (a && b))
fmt.Printf("(a || b): %v\\n", (a || b))
fmt.Printf("(!a): %v\\n", (!a))
fmt.Printf("(!b): %v\\n", (!b))
运行结果
[Running] go run "/Users/guoliang/Desktop/tempCodeRunnerFile.go"
(a && b): false
(a || b): true
(!a): false
(!b): true
位运算符
位运算符对整数在内存中的二进制位进行操作。
运算符 | 描述 |
& | 参与运算的两数各对应的二进位相与。 (两位均为1才为1) |
| | 参与运算的两数各对应的二进位相或。 (两位有一个为1就为1) |
^ | 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1) |
<< | 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。 |
>> | 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。 |
实例
package main
import "fmt"
func main()
a := 4 // 二进制 100
fmt.Printf("a: %b\\n", a)
b := 8 // 二进制 1000
fmt.Printf("b: %b\\n", b)
fmt.Printf("(a & b): %v, %b \\n", (a & b), (a & b))
fmt.Printf("(a | b): %v, %b\\n", (a | b), (a | b))
fmt.Printf("(a ^ b): %v, %b\\n", (a ^ b), (a ^ b))
fmt.Printf("(a << 2): %v, %b\\n", (a << 2), (a << 2))
fmt.Printf("(b >> 2): %v, %b\\n", (b >> 2), (b >> 2))
运行结果
[Running] go run "/Users/guoliang/Desktop/test.go"
a: 100
b: 1000
(a & b): 0, 0
(a | b): 12, 1100
(a ^ b): 12, 1100
(a << 2): 16, 10000
(b >> 2): 2, 10
赋值运算符
运算符 | 描述 |
= | 简单的赋值运算符,将一个表达式的值赋给一个左值 |
+= | 相加后再赋值 |
-= | 相减后再赋值 |
*= | 相乘后再赋值 |
/= | 相除后再赋值 |
%= | 求余后再赋值 |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
|= | 按位或后赋值 |
^= | 按位异或后赋值 |
实例
package main
import "fmt"
func main()
var a int
a = 100
fmt.Printf("a: %v\\n", a)
a += 1 // a = a + 1
fmt.Printf("a: %v\\n", a)
a -= 1 // a = a -1
fmt.Printf("a: %v\\n", a)
a *= 2 // a = a * 2
fmt.Printf("a: %v\\n", a)
a /= 2 // a = a / 2
fmt.Printf("a: %v\\n", a)
运行结果
[Running] go run "/Users/guoliang/Desktop/test.go"
a: 100
a: 101
a: 100
a: 200
a: 100
golang入门到项目实战第一个golang应用
参考技术A1.创建一个文件夹,例如:golang入门到项目实战2.在golang入门到项目实战文件夹中创建一个go文件,例如:test.go3.在test.go中输入如下内容:4.编译执行goruntest.go5.可仅选择编译执行gobuildtest.go,则目录下会多出个exe程序 查看详情
golang入门到项目实战|golang指针(代码片段)
Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无需拷贝数据。类型指针不能进行偏移和运算。Go语言中的指针操作非常简单... 查看详情
golang入门到项目实战golang匿名函数
参考技术Ago语言函数不能嵌套,但是在函数内部可以定义匿名函数,实现一下简单功能调用。所谓匿名函数就是,没有名称的函数。语法格式如下:当然可以既没有参数,可以没有返回值运行结果自己执行运行结果 查看详情
golang入门到项目实战|golang中的if语句(代码片段)
go语言中的if语句和其他语言中的类似,都是根据给定的条件表达式运算结果来,判断执行流程。go语言if语句语法if布尔表达式/*在布尔表达式为true时执行*/注意:在go语言中布尔表达式不用使用括号。go语言if语句实例... 查看详情
golang入门到项目实战golang并发编程之runtime包
参考技术Aruntime包里面定义了一些协程管理相关的api让出CPU时间片,重新等待安排任务运行结果退出当前协程运行结果运行结果如果修改最大核心数为1,运行结果如下,不会出现交替执行现象 查看详情
golang入门到项目实战golang并发变成之通道channel
...的数据类型。这是将值发送到通道的代码块需要使用<-运算符:语法一个包含5个值的缓冲区的字符串类型的goroutine1通道。然后我们通过通道发送字符串“Australia”。这是从通道接收值的代码块:语法<-运算符附加到通道变量... 查看详情
golang入门到项目实战|golang继承(代码片段)
golang本质上没有oop的概念,也没有继承的概念,但是可以通过结构体嵌套实现这个特性。例如packagemainimport"fmt"typeAnimalstructnamestringageintfunc(aAnimal)eat()fmt.Println("eat...")func(aAnimal)sleep()fmt.Println("sleep")typeDogstr... 查看详情
golang入门到项目实战|golang函数(代码片段)
golang函数简介函数的go语言中的一级公民,我们把所有的功能单元都定义在函数中,可以重复使用。函数包含函数的名称、参数列表和返回值类型,这些构成了函数的签名(signature)。go语言中函数特性go语言... 查看详情
golang入门到项目实战|golang指向数组的指针(代码片段)
定义语法varptr[MAX]*int;表示数据里面的元素的类型是指针类型实例演示packagemainimport"fmt"constMAXint=3funcmain()a:=[]int1,3,5variintvarptr[MAX]*intfmt.Println(ptr)//这个打印出来的是[<nil><nil><nil>]fo 查看详情
golang入门到项目实战|golang构造函数(代码片段)
golang没有构造函数的概念,可以使用函数来模拟构造函数的功能。例如packagemainimport"fmt"typePersonstructnamestringageintfuncNewPerson(namestring,ageint)(*Person,error)ifname==""returnnil,fmt.Errorf("name不能为空")ifage<0returnnil... 查看详情
golang入门到项目实战golang方法
参考技术Ago语言没有面向对象的特性,也没有类对象的概念。但是,可以使用结构体来模拟这些特性,我们都知道面向对象里面有类方法等概念。我们也可以声明一些方法,属于某个结构体。Go中的方法,是一种特殊的函数,定... 查看详情
golang入门到项目实战golang中的if语句
参考技术Ago语言中的if语句和其他语言中的类似,都是根据给定的条件表达式运算结果来,判断执行流程。注意:在go语言中布尔表达式不用使用括号。根据布尔值flag判断程序运行结果初始变量可以声明在布尔表达式里面,注意... 查看详情
golang入门到项目实战|golang高阶函数(代码片段)
...yHello)运行结果[Running]gorun"d:\\SynologyDrive\\软件开发\\go\\golang入门到项目实战\\goproject\\360duote.com\\pro01\\tempCodeRunnerFile.go"Hello,tomgo语言函数作为返回值packagemainimport"fmt"funcadd(x,yint)intreturnx+yfuncsub(x,yint)intreturnx-yfunccal(sstr... 查看详情
golang入门到项目实战|golang字符串(代码片段)
一个Go语言字符串是一个任意字节的常量序列。[]bytego语言字符串字面量在Go语言中,字符串字面量使用双引号""或者反引号'来创建。双引号用来创建可解析的字符串,支持转义,但不能用来引用多行;反... 查看详情
golang入门到项目实战golangfor循环语句
参考技术Ago语言中的for循环,只有for关键字,去除了像其他语言中的while和dowhile.注意:for表达式不用加括号循环输出1到10运行结果初始条件,可以写到外面运行结果初始条件和结束条件都可以省略运行结果这种情况类似其他语... 查看详情
golang入门到项目实战|golang结构体指针(代码片段)
...p_name)运行结果[Running]gorun"d:\\SynologyDrive\\软件开发\\go\\golang入门到项目实战\\goproject\\360duote.com\\pro01\\test.go"name:tomp_name:0xc000050230*p_name:tomgo结构体指针实例packagemainimport"fmt"funcmain()typePersonstructidintnamestringvartom=P 查看详情
golang入门到项目实战|go语言遍历map(代码片段)
可以使用forrange循环进行map遍历,得到key和value值。遍历keypackagemainimport"fmt"funcmain()m:=make(map[string]string)m["name"]="tom"m["age"]="20"m["email 查看详情
golang入门到项目实战|golang模拟oop的属性和方法(代码片段)
golang没有面向对象的概念,也没有封装和概念,但是可以通过结构体struct和函数绑定来实现OOP的属性和方法等特性。接收者receiver方法。例如,想要定义一个Person类,有name和age属性,有eat/sleep/work方法。packagema... 查看详情