离线
TA的专栏
打卡等级:热心大叔
打卡总天数:238
打卡月天数:0
打卡总奖励:3463
最近打卡:2025-11-30 17:40:26
等级头衔
等級: 晓枫资讯-上等兵
在线时间 0 小时
积分成就
威望 0 点
贡献 420 次
主题 371 次
精华 0 篇
金钱 4709 枚
积分 868 枚
、
注册时间 2023-1-7
最后登录 2025-11-30
一、引言
1、Go语言简介
Go语言,又称Golang,是由Google公司开发的一种现代编程语言。它起源于2007年,并在2009年正式对外发布。Go语言旨在提高软件开发的效率、可靠性和可维护性,特别在处理并发性方面表现出色。
2、Go语言特点
并发性支持: Go语言内置并发性支持,允许开发者构建高度并发和可扩展的应用。它提供了goroutine(轻量级线程)和channel(通信管道)等功能,简化了并发编程。
垃圾回收: Go语言拥有高效的垃圾回收机制,自动释放不再使用的内存。这减轻了开发者管理内存的负担,提高了程序的稳定性和可靠性。
类型安全: Go语言是一种强类型语言,提供了严格的类型检查机制。这有助于捕获类型错误,确保代码的可靠性。
跨平台性: Go语言编译成可执行文件后,可以在不同的操作系统(如Linux、Windows、macOS)上运行,无需进行重新编译。
高性能: Go语言编译器生成高度优化的机器代码,使程序运行速度快且资源消耗低。它特别适合处理高并发和数据密集型应用。
二、算术符
1、算术运算符
示例代码 package main
import (
"fmt"
)
func main() {
a := 10.5
b := 5.25
// 加法
sum := a + b
fmt.Printf("Sum: %.2f\n", sum)
// 减法
difference := a - b
fmt.Printf("Difference: %.2f\n", difference)
// 乘法
product := a * b
fmt.Printf("Product: %.2f\n", product)
// 除法
quotient := a / b
fmt.Printf("Quotient: %.2f\n", quotient)
} 复制代码 输出结果 运行上述代码后,输出结果如下:
Sum: 15.75Difference: 5.25Product: 55.13Quotient: 2.00 复制代码
2、关系运算符
在 Go 语言中,关系运算符用于比较两个值,并返回一个布尔值(true 或 false),表示比较的结果。关系运算符主要包括以下几种:
等于 (==): 检查两个操作数是否相等。
不等于 (!=): 检查两个操作数是否不相等。
大于 (>): 检查左边的操作数是否大于右边的操作数。
小于 (<): 检查左边的操作数是否小于右边的操作数。
大于等于 (>=): 检查左边的操作数是否大于或等于右边的操作数。
小于等于 (<=): 检查左边的操作数是否小于或等于右边的操作数。
示例代码 下面是一个简单的示例,展示了如何使用这些关系运算符:
package main
import (
"fmt"
)
func main() {
a := 10
b := 5
// 等于
isEqual := a == b
fmt.Printf("%d == %d: %v\n", a, b, isEqual)
// 不等于
isNotEqual := a != b
fmt.Printf("%d != %d: %v\n", a, b, isNotEqual)
// 大于
isGreater := a > b
fmt.Printf("%d > %d: %v\n", a, b, isGreater)
// 小于
isLess := a < b
fmt.Printf("%d < %d: %v\n", a, b, isLess)
// 大于等于
isGreaterOrEqual := a >= b
fmt.Printf("%d >= %d: %v\n", a, b, isGreaterOrEqual)
// 小于等于
isLessOrEqual := a <= b
fmt.Printf("%d <= %d: %v\n", a, b, isLessOrEqual)
} 复制代码 输出结果 运行上述代码后,输出结果如下:
10 == 5: false10 != 5: true10 > 5: true10 < 5: false10 >= 5: true10 <= 5: false 复制代码
3、逻辑运算符
在 Go 语言中,逻辑运算符用于组合条件表达式,并返回布尔值。逻辑运算符主要有三种:
逻辑与 (&&): 只有当两边的操作数都为 true 时,整个表达式才为 true。
逻辑或 (||): 只要任意一边的操作数为 true,整个表达式就为 true。
逻辑非 (!): 反转操作数的布尔值。
示例代码 下面是一个简单的示例,展示了如何使用这些逻辑运算符:
package main
import (
"fmt"
)
func main() {
a := true
b := false
// 逻辑与 (&&)
andResult := a && b
fmt.Printf("%t && %t = %t\n", a, b, andResult)
// 逻辑或 (||)
orResult := a || b
fmt.Printf("%t || %t = %t\n", a, b, orResult)
// 逻辑非 (!)
notA := !a
fmt.Printf("!%t = %t\n", a, notA)
notB := !b
fmt.Printf("!%t = %t\n", b, notB)
} 复制代码 输出结果 运行上述代码后,输出结果如下:
true && false = falsetrue || false = true!true = false!false = true 复制代码
4、位运算符
在 Go 语言中,位运算符用于对整数类型的变量或常量进行按位操作。位运算符主要包含以下几个:
按位与 (&): 对两个操作数的每一位进行与操作,对应位都为 1 时结果为 1,否则为 0。
按位或 (|): 对两个操作数的每一位进行或操作,对应位有一个为 1 时结果为 1,否则为 0。
按位异或 (^): 对两个操作数的每一位进行异或操作,对应位相同为 0,不同为 1。
按位取反 (^): 对单个操作数的每一位进行取反操作,1 变为 0,0 变为 1。
左移 (<<): 将操作数的二进制表示向左移动指定位数,高位补零。
右移 (>>): 将操作数的二进制表示向右移动指定位数,低位补零或符号扩展(对于负数)。
示例代码 下面是一个简单的示例,展示了如何使用这些位运算符:
package main
import (
"fmt"
)
func main() {
a := 0b1010 // 二进制表示为 1010,即十进制的 10
b := 0b1100 // 二进制表示为 1100,即十进制的 12
// 按位与 (&)
andResult := a & b
fmt.Printf("a & b = %b (decimal: %d)\n", andResult, andResult)
// 按位或 (|)
orResult := a | b
fmt.Printf("a | b = %b (decimal: %d)\n", orResult, orResult)
// 按位异或 (^)
xorResult := a ^ b
fmt.Printf("a ^ b = %b (decimal: %d)\n", xorResult, xorResult)
// 按位取反 (^)
notResult := ^a
fmt.Printf("^a = %b (decimal: %d)\n", notResult, notResult)
// 左移 (<<)
leftShiftResult := a << 2
fmt.Printf("a << 2 = %b (decimal: %d)\n", leftShiftResult, leftShiftResult)
// 右移 (>>)
rightShiftResult := a >> 1
fmt.Printf("a >> 1 = %b (decimal: %d)\n", rightShiftResult, rightShiftResult)
} 复制代码 输出结果 运行上述代码后,输出结果如下:
a & b = 1000 (decimal: 8)a | b = 1110 (decimal: 14)a ^ b = 0110 (decimal: 6)^a = ...110101 (decimal: -11) // 注意,按位取反在二进制补码表示下会有所不同a << 2 = 101000 (decimal: 40)a >> 1 = 101 (decimal: 5) 复制代码 解释 按位与 (&):
a & b = 1010 & 1100 = 1000 (十进制 8)
按位或 (|):
a | b = 1010 | 1100 = 1110 (十进制 14)
按位异或 (^):
a ^ b = 1010 ^ 1100 = 0110 (十进制 6)
按位取反 (^):
^a = ^1010 (二进制表示为补码,具体取决于整数类型大小)
对于 int 类型,取反的结果为 -11(在补码表示下)
左移 (<<):
a << 2 = 1010 << 2 = 101000 (十进制 40)
右移 (>>):
a >> 1 = 1010 >> 1 = 101 (十进制 5)
应用场景
位运算符在计算机科学中有广泛的应用,例如在算法优化、网络编程、数据压缩等领域。此外,位运算符还可以用来设置或清除标志位、位掩码操作等。
5、赋值运算符
在 Go 语言中,赋值运算符用于将一个值赋给一个变量或表达式。除了基本的赋值运算符 = 之外,Go 还支持一系列复合赋值运算符,这些运算符结合了算术运算符或其他运算符的功能与赋值操作。
基本赋值运算符 = 基本的赋值运算符
= 用于将一个值赋给一个变量。
package main
import (
"fmt"
)
func main() {
a := 10
fmt.Println("Initial value of a:", a)
// 使用 = 赋值
a = 20
fmt.Println("Value of a after assignment:", a)
} 复制代码 输出结果: Initial value of a: 10Value of a after assignment: 20 复制代码 复合赋值运算符 复合赋值运算符结合了算术运算符或其他运算符的功能与赋值操作。常见的复合赋值运算符包括:
加法赋值 (+=): 将变量的当前值与另一个值相加,并将结果赋给该变量。
减法赋值 (-=): 将变量的当前值与另一个值相减,并将结果赋给该变量。
乘法赋值 (*=): 将变量的当前值与另一个值相乘,并将结果赋给该变量。
除法赋值 (/=): 将变量的当前值与另一个值相除,并将结果赋给该变量。
取模赋值 (%=): 将变量的当前值与另一个值取模,并将结果赋给该变量。
按位与赋值 (&=): 对变量的当前值与另一个值按位与,并将结果赋给该变量。
按位或赋值 (|=): 对变量的当前值与另一个值按位或,并将结果赋给该变量。
按位异或赋值 (^=): 对变量的当前值与另一个值按位异或,并将结果赋给该变量。
左移赋值 (<<=): 将变量的当前值左移一定位数,并将结果赋给该变量。
右移赋值 (>>=): 将变量的当前值右移一定位数,并将结果赋给该变量。
示例代码 下面是一个简单的示例,展示了如何使用这些复合赋值运算符:
package main
import (
"fmt"
)
func main() {
a := 10
b := 5
fmt.Println("Initial value of a:", a)
fmt.Println("Initial value of b:", b)
// 加法赋值
a += b
fmt.Println("Value of a after += b:", a)
// 减法赋值
a -= b
fmt.Println("Value of a after -= b:", a)
// 乘法赋值
a *= b
fmt.Println("Value of a after *= b:", a)
// 除法赋值
a /= b
fmt.Println("Value of a after /= b:", a)
// 取模赋值
a %= b
fmt.Println("Value of a after %= b:", a)
// 按位与赋值
a &= 0b1100
fmt.Println("Value of a after &= 0b1100:", a)
// 按位或赋值
a |= 0b0011
fmt.Println("Value of a after |= 0b0011:", a)
// 按位异或赋值
a ^= 0b0101
fmt.Println("Value of a after ^= 0b0101:", a)
// 左移赋值
a <<= 2
fmt.Println("Value of a after <<= 2:", a)
// 右移赋值
a >>= 1
fmt.Println("Value of a after >>= 1:", a)
} 复制代码 输出结果 运行上述代码后,输出结果如下:
Initial value of a: 10Initial value of b: 5Value of a after += b: 15Value of a after -= b: 10Value of a after *= b: 50Value of a after /= b: 10Value of a after %= b: 0Value of a after &= 0b1100: 4Value of a after |= 0b0011: 7Value of a after ^= 0b0101: 6Value of a after <<= 2: 24Value of a after >>= 1: 12 复制代码
6、其他运算符(如&取地址、*解引用等)
在 Go 语言中,除了
算术运算符、关系运算符、逻辑运算符和位运算符 外,还有一些特殊的运算符用于指针操作,以及其他用途的运算符。这里主要介绍指针相关的
运算符 &(取地址) 和
*(解引用) ,以及一些其他常用的运算符。
指针相关的运算符
取地址 (&):
用于获取变量的内存地址,返回的是指向该变量的指针。
解引用 (*):
示例代码 下面是一个简单的示例,展示了如何使用取地址和解引用运算符:
package main
import (
"fmt"
)
func main() {
// 声明并初始化一个变量
value := 10
// 取得变量的地址
addressOfValue := &value
fmt.Printf("Address of value: %p\n", addressOfValue)
// 解引用地址,获取值
unreferencedValue := *addressOfValue
fmt.Printf("Unreferenced value: %d\n", unreferencedValue)
// 修改指针指向的值
*addressOfValue = 20
fmt.Printf("Modified value via pointer: %d\n", value)
} 复制代码 输出结果 运行上述代码后,输出结果如下:
Address of value: 0xc000018048Unreferenced value: 10Modified value via pointer: 20 复制代码 解释
取地址 (&):
addressOfValue := &value 获取 value 变量的地址,并将其赋值给 addressOfValue。
解引用 (*):
unreferencedValue := *addressOfValue 解引用 addressOfValue,访问其指向的值,并赋值给 unreferencedValue。
修改指针指向的值:
*addressOfValue = 20 通过解引用 addressOfValue 来修改其指向的 value 变量的值。
其他运算符 除了指针相关的运算符外,Go 语言还有其他一些常用的运算符,例如:
范围运算符 (range):
用于迭代数组、切片、映射(maps)或通道(channels)中的元素。
转换运算符 (T(expr)):
逗号运算符 (comma):
在 Go 语言中,逗号通常用于序列化多个表达式,如在声明多个变量时使用。
示例代码 下面是一些其他运算符的示例:
范围运算符 (range)
package main
import (
"fmt"
)
func main() {
// 使用 range 迭代切片
slice := []int{1, 2, 3, 4, 5}
for index, value := range slice {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
} 复制代码 输出结果
Index: 0, Value: 1Index: 1, Value: 2Index: 2, Value: 3Index: 3, Value: 4Index: 4, Value: 5 复制代码 转换运算符 (T(expr))
package main
import (
"fmt"
)
func main() {
var floatVal float64 = 3.14
intVal := int(floatVal) // 将 float64 转换为 int
fmt.Printf("Converted integer value: %d\n", intVal)
} 复制代码 输出结果
Converted integer value: 3 复制代码 逗号运算符 (comma)
在 Go 语言中,逗号主要用于声明多个变量:
package main
import (
"fmt"
)
func main() {
a, b := 10, 20
fmt.Printf("a: %d, b: %d\n", a, b)
} 复制代码 输出结果
总结
到此这篇关于Go语言语法基础之算术符的文章就介绍到这了,更多相关Go语言算术符内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1 、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2 、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3 、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:
进行删除处理。
4 、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5 、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。