- 计算机的底层是位(bit),而实际操作是基于大小固定的单元中的数值,称为字(word),可以解释为整数,浮点数,位集(bitset)或内存地址等。
- go四大类数据类型:
- 基础类型
- 数字
- 字符串
- 布尔型
- 聚合类型
- 数组
- 结构体
- 引用类型
- 指针
- 切片
- map
- 函数
- 通道
- 接口类型
- 基础类型
类别 | 表示 |
---|---|
有符号整数 | int8/int16/int32/int64 |
无符号整数 | uint8/uint16/uint32/uint64 |
原生整数 | int/uint 与系统位数一致 |
rune | 同int32 指明unicode码点 |
byte | 同int8 强调原始数据而非量值 |
uintptr | 无符号整数,大小不明,存放指针 |
float32 | 精度大约6位 |
float64 | 精度大约15位 |
complex64 | 复数,由float32构成 |
complex128 | 复数,由float64构成 |
bool | 无法隐式转换为数值,反之也不行 |
-
字符串字面量
-
s[i, j]
生成子串 - 使用utf8编码,非ascii字符码点需要两个或多个字节
- 可以用加号连接字串
- 字串间可以比较
- 字串可以赋值,不可改变,这意味着两个字串可以共用一个底层
- ``原样字串,忽略换行
-
-
编码
-
ASCII码:7位表示128个字符
-
Unicode码:包含世界上所有字符,各自有一个叫Unicode码点的标准数字,go中称为文字符号(rune),大约有十二万字符,int16存不下,int32刚好可以,也就是rune。我们可以让每个字符都占32位,即utf32,但是太浪费了,所以采用了utf8编码。
-
UTF-8编码:每个字符用1-4个字节表示,go中允许如下表示。
\xhh
h式十六进制数字,大小写皆可,且必须是两位\ooo
八进制,必须使用三位数字,且不超过\377\uhhh
16位码点值\Uhhhhhhhh
32位码点值当[]rune作用于utf8编码的字串时,返回unicode码点序列
-
-
字符串和字节切片
-
strings
包:搜索,替换,比较,修整,切分,连接字符串 -
bytes
包:类似strings
用于操作[]byte类型 -
strconv
包:布尔值,整数,浮点数与字符串间的转换,还有为字符串添加/去除引号的函数 -
unicode
包:有判别文字符号值特性的函数,如IsDigit,IsLetter,IsUpper,IsLower -
字符串可以和字节切片相互转换
s := "abc" b := []byte(s) s2 := string(b)
-
-
字符串和数字的相互转换
-
整数转字符串
-
fmt.Sprintf
-
strconv.Itoa
x := 123
y := fmt.Sprintf("%d",x)
fmt.Println(y,strconv.Itoa(x)) //“123 132”-
按不同进位制格式化数字
fmt.Println(strconv.FormatInt(int64(x),2)) //"1111011"
fmt.Printf
里的%b,%d,%o,%x
往往比Format方便s := fmt.Sprintf("x=%b",x) //"x=1111011"
-
-
字符串转整数
x,err := strconv.Atoi("123") //x是整形 y,err := strconv.ParseInt("123",10,64) //十进制,int64类型
-
-
常量
-
常量是一种表达式,在编译阶段就计算出表达式的值,常量本质上都属于基本类型,对于常量操作数,所有数学运算,逻辑运算和比较运算后的结果依然是常量
-
const ( a = 1 b c = 2 d ) //a=1 b=1 c=2 d=2
-
const ( _ = 1 << (10 * iota) KiB //1024 MiB //1048576 )
-
无类型常量精度可以很高,常量声明(包扩短变量声明)都是有类型的,
const a = 1024
这样没有
欢迎访问我的主页
-