Go基本数据类型与运算符
基本数据类型
布尔类型: bool
取值:true , false
打印占位符:%t
数值类型
-
整数:
-
int8 有符号8位(-128 到 127)
-
int16 有符号16位(-32768 到 32767)
-
int32 有符号32位(-21474833648 到 21474833647)
-
int64 有符号64位(-9223372036854775808 到 9223372036854775807)
-
uint8 无符号8位(0到255)
-
uint16 无符号16位(0到65535)
-
uint32 无符号32位(0到4294967295)
-
uint64 无符号64位(0到18446744073709551615)
-
golang没有short,long表示方式,直接用类型+长度表示
-
符号:最高位表示符号位,0正数,1负数,其余位表示数值
-
无符号:所有位表示数值
-
实际使用时通常使用int或unit,int和uint根据底层平台,自动识别位数,32位系统为int32和uint32,64位系统为int64和uint64。
-
作为强类型语言,如果是64位系统,int与int64不是同一种类型,也不能相互赋值
-
隐式类型的数值变量类型推导为int
var i3 = 9223372036854775807 //类型推导i3是int类型
-
-
byte
uint8的别称
-
rune
int32的别称
-
-
浮点:小数
-
float32
单精度
-
float64
双精度
打印占位符:%f ,默认打印小数点后6位,约束位数则表示为%.2f
不使用占位符,直接打印,则会打印原始的数值位数,即字面量的位数
-
-
字符串:string
-
概念:
多个byte的集合,理解为一个字符序列
-
语法:
用双引号表示,也可以用``(波浪号)表示
-
占位符:
- %s
- %q 打印时带" "
-
-
字符
-
概念:
用int32表示类型
-
语法:
用单引号表示
-
占位符:
- %c
- %q 打印时带' '
-
编码
编码格式 描述 asc2 美国最初制定的字母对应的编码表 gbk 在asc2的基础上增加了中文对应的编码;其他国家也有类似的自己语言的编码表 unicode 1.国家标准化组织将各国语言的字符编码统一到了一张编码表,号称包括了全世界的语言 2.unicode只是统一了各国语言各个字符的数值编码,但没有规定如何存储这些数值 3.unicode不兼容gbk表,unicode对中文编码进行了重新排列,所以unicode的中文对应编码与gbk的完全不同 4.unicode与asc2是兼容的,所以英文字符的数值编码没有任何变化 unicode存储方式 描述 utf8 utf16 utf32 -
转义字符 \
- 有一些字符有特殊作用,可以转义为普通字符
- 有一些是普通字符,转义后具有了特殊作用
- 在
表示的字符串中""作为普通字符,在""表示的字符串中
作为普通字符
-
复合数据类型
-
array
-
slice
-
map
-
function
-
pointer
-
struct
-
interface
-
channel
数据类型转换
-
语法格式
Type(Value)
浮点型向数值型转换时,只取整数部分
布尔型无法转换为其他类型
-
常量
-
在需要时会隐式自动转型,不需要显式的转换
-
高精度类型常量/字面常量无法用Type(Value)转换为低精度类型(浮点->整型,但同型的可以,如float64->float32)
const i7 = 3.6565 int(i7) //报错
-
高精度类型常量/字面常量无法直接(即隐式方式)赋值给低精度类型变量(浮点->整型,同型都不可以)
const i7 = 3.6565 var i2 int = i7 //报错
-
常量隐式类型转换,需要新的类型空间足够大才行
-
常量字面量本身的精度是非常高的,一旦将常量赋值给变量或const,就会降低精度
-
在表达式中,常量/字面常量默认会向表达式中的变量类型转换,注意不支持向低精度转换
const i7 = 3.6565 var i2 float64 i7+i2 //常量i7向float64转换,如果i2是int型就会报错
-
-
变量
- go是静态强类型语言,定义,赋值,运算时必须类型一只,所以变量类型必须一致
运算符
-
算数运算符
+ - * /取商 %取余 ++ -- ++ -- 没有返回值,也就是一个语句 ++ -- 不支持前置使用,也就是++c --c是不合法的
语句指的是执行单元,通常以行为单位,
表达式指的是可用于计算的式子,即可能产生一个值的式子。
语句可以包含有表达式,表达式也可以单独形成一个语句
%% 打印时转义%的作用,使其只输出字符%
-
关系运算符
> < >= <= != ==
- 结果是布尔类型
-
逻辑运算符
&&短路与 ||短路或 ! (其它语言 &与 |或 两种操作需要表达式各部分必须都运算一遍)
-
位运算符
& | ^异或 &^位清空 ~取反
-
将数值转为二进制,按位操作
-
异或
-
两元操作时 位置上相同为0,不同为1
重点再异上,所以不同为1
-
一元操作时 就是按位取反
-
-
位清空
a&^b 对于b上的每一位数值,如果为0就取对应位上a的数值,如果为1结果位就取0
-
位移运算符
-
<< 按位左移
a << b 将a转为二进制,向左移动b位,也就是放大2的b次方
-
>> 按位右移
a >> b b 将a转为二进制,向右移动b位
-
-
-
赋值运算符
= += -= *= /= %= <<= >>= &= |= ^=
-
运算符的优先级
- 二元运算符均是从左至右
- 最好通过括号提升可读性
优先级 运算符 7 ~ ! ++ -- 一元运算符 6 * / % << >> & &^ 5 + - ^ 4 == != < <= >= > 3 <- 通道操作 2 && 1 ||