golang数据类型
- golang 的数字类型明确标注了长度、有无符号
- golang 不会帮你做类型转换,类型不同无法通过编译。也因此,string 只能和string 拼接
- golang 有一个很特殊的 rune 类型,接近一般语言的 char 或者 character 的概念,非面试情况下,可以理解为 “rune = 字符”
- string 遇事不决找 strings 包
数据类型-string 类型
- string是所有8位字节字符串的集合,通常但不一定代表UTF-8编码的文本
- 字符串可以为空,但不能为 nil (Type类型的空值),此处的字符串为空是 ""
- string 类型的底层是一个byte 数组
string的基本操作
- 同其他语言一样,输出需要双引号包裹起来,则内部双引号需要使用\转义
- `引号包裹起来,则内部`需要\转义
- string长度计算长度一般用 len(str)获取【中文占位3~4字符】,如需要计算非ASC II字符(中文)数量需要编码处理,则用编码库计算
- string 的拼接直接使用 + 号就可以。注意的是,某些语言支持 string 和别的类型拼接,但是golang 不可以,只能数据同类型相加,非同字符如“ABC”+123 将报错,需要123转换为字符才可相加
- 需要字符处理时可以导入strings包,方法包括: 查找和替换、大小写转换、相等、子字符串相关等

一些string包的用法:
//判断s1的前缀是否是H
fmt.Println(strings.HasPrefix(s1,"H"))
//在s1中查找字符串o
fmt.Println(strings.Index(s1,"o"))
//把s1全部转为大写
fmt.Println(strings.ToUpper(s1))
【官方string包文档】
数据类型-rune 类型
rune类型是Go语言中的一个基本类型,其实就是一个int32的别名,主要用于表示一个字符类型大于一个字节小于等于4个字节(一个 UTF-8 字符)的情况下,特别是中文字符。
- rune,直观理解,就是字符
- rune 不是 byte!
- rune 本质是 int32,一个 rune 四个字节
- rune 在很多语言里面是没有的,与之对应的是,golang 没有 char 类型。rune 不是数字,也不是 char,也不是 byte!
- rune对处理中文、日文或者其他复合字符时操作更友好
- 默认创建字符类型时,不定义属性时默认选用rune类型
数据类型-byte 类型
- byte,字节,本质是 uint8,表示ASCII码的 1个字节
- 对应的操作包在 bytes 上
- 可以理解为 byte是ASCII编码字符,rune是utf-8字符
其他数据类型
- bool: true, false
- int8(占用1个字节), int16(占用2个字节), int32(占用4个字节), int64(占用8个字节), int(随着操作系统变化)
- uint8, uint16, uint32, uint64, uint(占用字节同int类型,区别是无符号)


- float32(单精度类型,占用4字节除小数点外有效数字为7位,只能精确到小数后6位), float64(双精度类型,占用8字节除小数点外有效数字为16位,只能精确到小数后15位)
类型互转可以借助strconv包

变量声明 & 常量声明(创建变量)
var | const,语法:var | const name type = value
- 不定义类型时,golang会自动判断类型,如 字符为string,数字为int,浮点数为float64
- var xxx= 可缩写为 xxx :=,但此方法只可用于局部变量,同时简写方式创建多变量时(xxx,xx2:= ),中间用逗号隔开
- 同时需要创建多个 变量|常量 时可用 var()|const() 方式创建,多个参数换行隔开,且创建是也可设定计算属性,如:

- 变量命名只支持驼峰命名法
- 首字符是否大写控制了访问性:大写包外可访问
- 变量声明后不用或者类型不匹配、多次变量声明都会导致报错
- 常量与其他编程语言一样,声明以后不可再次修改
- 变量名使用空白标识符 ('_') 可以赋给任何类型的任何值或用任何类型的值声明。空白标识符会被舍弃,不会被编译器使用。例如,当您想要捕获返回值但不打算在以后使用此值时,可以考虑使用空白标识符。


