「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战」
运算符
算术运算符
加(+)、减(-)、乘(*)、除(/)、取余(%)
关系运算符
== 、!=、>、>=、<、<=
逻辑运算符
&& 逻辑 AND 运算符,
|| 逻辑 OR 运算符
! 逻辑 非运算符
位运算符
& 参与运算的两数各对应的二进位相与。(两位均为1才为1)
l 参与运算的两数各对应的二进位相或。(两位有一个为1就为1)
^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(两位不一样则为1)
<< 左移n位就是乘以2的n次方。“a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。
>> 右移n位就是除以2的n次方。“a>>b”是把a的各二进位全部右移b位
赋值运算符
= 简单的赋值运算符,将一个表达式的值赋给一个左值
+= 相加后再赋值
-= 相减后再赋值
*= 相乘后再赋值
/= 相除后再赋值
%= 求余后再赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
l= 按位或后赋值
^= 按位异或后赋值
下划线
- 在 import 中,下划线作用是导入其他的package
- 在代码中,是特殊标识符,用来忽视结果,相当于一个占位符
result , _ := os.open("XXXXX")
// 下划线是个占位符,只是用来标识这个结果,但是我们可能不需要
变量和常量
声明与初始化
#声明方式1
var 变量名 变量类型
var a int
#初始化
var 变量名 类型 = 表达式
var name string = “元宇宙”
# 直接声明并初始化变量
变量名 := 变量值
name := "元宇宙"
注意: :=不能使用在函数外。
批量变量声明
#声明
var (
变量名1 变量类型
变量名2 变量类型
)
var (
a int
str string
)
#初始化
var name, age = "jasen", 20
匿名变量
多重赋值时,想忽略某个值可以使用匿名变量,用下划线表示
- 匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
func calResult(){
return "元宇宙",18
}
func main(){
name, _ := calResult()
}
常量
使用关键字 const
# 单个常量定义
const pi = 3.1415
# 多个常量声明
const (
pi = 3.1415
e = 2.7182
)
# 同时声明多个时,且多个值都相同的值
const (
n1 = 100
n2
n3
)
iota
常量计数器,仅使用在常量表达式中。常用于定义枚举
const (
n1 = iota //0
n2 //1
n3 //2
n4 //3
)
// 跳过某个值
const (
n1 = iota //0
n2 //1
_
n4 //3
)
// 中间插队插值
const (
n1 = iota //0
n2 = 100 //100
n3 = iota //2
n4 //3
)
const n5 = iota //0 iota在const关键字出现时将被重置为0
// 多个 itao 定义在一行
const (
a, b = iota + 1, iota + 2 //1,2
c, d //2,3
e, f //3,4
)
基本类型
整型
- 有符号
int8、int16、int32、int64
- 无符号
uint8、uint16、uint32、uint64
uint8 ==> byte型
Int16 ==> C 语言中的 short 型
Int64 ===> long 型
浮点型
- float32
- float64
复数
complex64和complex128
复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位
布尔值
以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值.布尔类型变量的默认值为false。
字符串
使用双引号包围起来的内容
- 字符串转义符
\r 回车符(返回行首)
\n 换行符(直接跳到下一行的同列位置)
\t 制表符
' 单引号
" 双引号
\ 反斜杠
- 多行字符串
# 使用反引号字符
s1 := `第一行
第二行
第三行
`
- 常用字符串的操作
str := "hello , 元宇宙"
len(str) // 求长度
str1 + str2 // 使用 + 拼接字符串
fmt.Sprintf // sprintf 拼接字符串
str.Split // 分割
str.Contains // 判断是否包含
str.HasPrefix, // 前缀判断
str.HasSuffix // 后缀判断
str.Index() // 子串出现的位置
str.LastIndex() // 子串出现的位置
str.Join(a[]string, sep string) // join操作
- 修改字符串
// 强制类型转换--byte型
byteS1 := []byte(str)
// 强制类型转换-- rune类型
runeS2 := []rune(str)
通过类型转换然后对单个字符修改,将其转换成[]rune或[]byte,完成后再转换为string。但是这种转换方式都会重新分配内存,并复制字节数组
byte 和 rune 类型
字符串是由很多个字符组成的,所以遍历字符串元素可以获取单个字符,字符使用单引号。
- uint8类型,也是 byte型,是一个 ascii 码的一个字符
- rune 类型 是一个 utf-8 字符,其实是一个 int32
\