在Go语言中,运算符是执行数学计算的符号。基本运算符用于执行基本的算术操作,如加、减、乘、除等。高级运算符用于执行更复杂的操作,如条件判断、类型转换、格式化输出等。
一、基本运算符
1. 算术运算符
- `+`:加法运算符,将两个操作数相加。
- `-`:减法运算符,从左侧操作数中减去右侧操作数。
- `*`:乘法运算符,将两个操作数相乘。
- `/`:除法运算符,将左侧操作数除以右侧操作数。
2. 关系运算符
- `==`:等于运算符,比较两个操作数是否相等。
- `!=`:不等于运算符,比较两个操作数是否不相等。
- `<`:小于运算符,比较左侧操作数是否小于右侧操作数。
- `<=`:小于或等于运算符,比较左侧操作数是否小于或等于右侧操作数。
- `>`:大于运算符,比较左侧操作数是否大于右侧操作数。
- `>=`:大于或等于运算符,比较左侧操作数是否大于或等于右侧操作数。
3. 逻辑运算符
- `&&`:逻辑与运算符,当所有操作数都为真时,结果为真。
- `||`:逻辑或运算符,当至少一个操作数为真时,结果为真。
- `!`:逻辑非运算符,取反操作数的逻辑值。
4. 位运算符
- `&`:按位与运算符,比较两个操作数的二进制表示中的对应位。
- `|`:按位或运算符,比较两个操作数的二进制表示中的对应位。
- `^`:按位异或运算符,比较两个操作数的二进制表示中的对应位。
- `~`:按位取反运算符,将操作数的二进制表示中的对应位取反。
二、高级运算符
1. 条件运算符
- `if else`:根据条件表达式的结果,执行相应的代码块。
- `switch`:根据给定的条件表达式,执行相应的代码块。
2. 类型转换运算符
- `(float64)`:将左侧操作数转换为浮点数类型。
- `(string)`:将左侧操作数转换为字符串类型。
- `(int)`:将左侧操作数转换为整数类型。
- `(bool)`:将左侧操作数转换为布尔值。
3. 格式化输出运算符
- `fmt.Println()`:使用标准输出函数打印信息。
- `fmt.Sprintf()`:使用标准输出函数格式化输出。
- `fmt.Printf()`:使用标准输出函数格式化输出。
- `fmt.Fprintf()`:使用标准输出函数格式化输出。
4. 并发控制运算符
- `go func() { ... }()`:定义并执行并发函数。
- `go func() { ... defer func() { ... }`:定义并执行匿名函数,并在程序结束时自动调用该函数。
- `go func() { ... defer go func() { ... }`:定义并执行匿名函数,并在程序结束时自动调用该函数。
5. 错误处理运算符
- `error`:声明一个错误变量。
- `panic`:引发一个运行时错误。
- `defer`:延迟执行一个函数。
- `return`:返回一个值。
- `throw`:抛出一个异常。
6. 切片和映射运算符
- `append()`:向切片末尾添加元素。
- `len()`:获取切片的长度。
- `copy()`:复制切片的一个副本。
- `index()`:获取切片中指定索引的元素。
- `cap()`:获取切片的最大容量。
- `range()`:遍历切片中的每个元素。
- `for range (value := range slice) { ... }`:使用范围循环遍历切片中的每个元素。
- `select { ... }`:使用选择结构根据条件执行不同的代码块。
7. 指针运算符
- `*`:解引用指针,获取指向的值。
- `(&type)`:获取指针所指向的类型。
- `(*type)()`:获取指针所指向类型的函数指针。
- `(*type)(value)`:将值转换为指针所指向类型的值。
- `unsafe.Pointer()`:创建一个不安全的指针。
8. 函数参数运算符
- `func(arg1, arg2, ...) returnType { ... }()`:定义一个接收多个参数并返回相同类型的函数。
- `func(arg1, arg2, ...) returnType { ... }(value1, value2, ...)`:定义一个接收多个参数并返回相同类型的函数,将传入的值作为参数传递给函数。
9. 闭包运算符
- `func() { return value; }()`:定义一个闭包,包含一个值。
- `func() { return nil; }()`:定义一个空闭包。
- `func() { return value; }()`:定义一个包含特定值的闭包。
10. 反射运算符
- `reflect.ValueOf(obj)`:获取对象的类型信息。
- `reflect.TypeOf(obj)`:获取对象的类型名称。
- `reflect.TypeOf(t)`:获取泛型类型 t 的类型名称。
- `reflect.ValueOf(t)`:获取泛型类型 t 的实例。
- `reflect.TypeOf(t)`:获取泛型类型 t 的接口。
- `reflect.InterfaceOf(i)`:获取泛型类型 i 的所有实现。
- `reflect.ValueOf(t)`:获取泛型类型 t 的所有字段。
- `reflect.TypeOf(t)`:获取泛型类型 t 的所有方法。
- `reflect.MethodOf(t, methodName)`:获取泛型类型 t 中名为 methodName 的方法。
- `reflect.StructOf(t)`:获取泛型类型 t 的 struct 类型。
- `reflect.StructOf(t, fieldName)`:获取泛型类型 t 中名为 fieldName 的字段。
- `reflect.StructOf(t, methodName)`:获取泛型类型 t 中名为 methodName 的方法。
- `reflect.StructOf(t, fieldName, fieldValue)`:获取泛型类型 t 中名为 fieldName 的字段,其值为 fieldValue。
- `reflect.StructOf(t, methodName, methodValue)`:获取泛型类型 t 中名为 methodName 的方法,其值为 methodValue。
- `reflect.StructOf(t, fieldName, fieldValue, fieldType)`:获取泛型类型 t 中名为 fieldName 的字段,其值为 fieldValue,其类型为 fieldType。
- `reflect.StructOf(t, methodName, methodValue, methodType)`:获取泛型类型 t 中名为 methodName 的方法,其值为 methodValue,其类型为 methodType。
- `reflect.StructOf(t, fieldName, fieldValue, fieldType)`:获取泛型类型 t 中名为 fieldName 的字段,其值为 fieldValue,其类型为 fieldType。
- `reflect.StructOf(t, methodName, methodValue, methodType)`:获取泛型类型 t 中名为 methodName 的方法,其值为 methodValue,其类型为 methodType。