Go基本数据类型
整型
//以下是有符号的整型
var a int
var b int8
var c int16
var d int32
var d int64
//以下是无符号的整型
var e uint
var f uint8
var g uint16
var h uint32
var i uint64
注意点
- 不同的类型不能直接作运算.
- int后面的数字8,16,32,64表示整型的范围.
类型 | 有无符号 | 占用存储空间 | 表数范围 | 备注 |
---|---|---|---|---|
int8 | 有 | 1字节 | 前面加u为无符号整型 | |
int16 | 有 | 2字节 | ||
int32 | 有 | 4字节 | ||
int64 | 有 | 8字节 |
没有数字的int是自动匹配系统位数的整型,即在32位系统,就相当于int32在64位系统相当于int64.但是同样不能与int32或者int64的整型直接做运算.因为,它们在本质上仍然是不同的类型.而go中对类型有强烈的要求
uint8 等价 byte int32 等价 rune
var h uint8 = 65
var i byte = 'A'
fmt.Println(h, i)
if i == h {
fmt.Println(h, i)
}
//这段代码不会出错.在go里byte与uint8是同一个类型.byte为uint8的别称
浮点型
浮点型只有两咱:float32与float64
var a float32
var b float64
var c = 2.0 //用推导式来确定变量类型时,带小数点的默认为float64
注意
同整型,float32与float64是不同的类型,不能直接做运行(包括数学运算与逻辑运算)
浮点型在各个语言中都是不能精确表示的,因此,不要对浮点型的数字做太多的数学运算.以免引起不必要的错误.可以根据精度要求,做一定的变换操作,使得计算更加精准.
字符串
字符串是用的最多的一种类型.操作也比较多样与复杂.
声明
var a string //末初始化意味着等于""
var b = "小样"
c := "搞不定你"
//以上三种都可以
拼接
a + b //直接用加号把两个变量连接起来
c := fmt.Sprintf("%s%s",a,b) //用Sprintf格式化方式把两个(多个)字符串拼接起来 用到fmt包
d := strings.Join(array, 拼接符) //注意第一个参数为字符串数组,第二个参数为连接符,用什么符号去连接字符串用到string包
var buffer bytes.Buffer //用到bytes包
buffer.WriteString(a)
buffer.WriteString(b)
e = buffer.String()
var builder strings.Builder //strings包
builder.WriteString(a)
builder.WriteString(b)
f := builder.String()
注意
五种方法,第四和第五种方法效率最高.但是如果要拼接的内容太多,可以考虑用第三种方法.如果不多,建议用第四/五方法.毕竟Go是一个讲究运行效率的开发语言.
不过图方便,就用+了
转义
"\r" // 回到,回到行首
"\n" // 换行
"\t" // tab
"\"" // "
"\\" // \
以上转义字符要熟悉
多行字符串
`这是一个多行字符串
这是第二行
这是第三行
这是一个路径 :C:\windows\
这是一个双引号引起来的东西"内容在此"
不会转义,也不用担心双引号
`
分割
strings.Split(字符串, 分割符) //返回一个列表(数组)
a := `c:\windows\system32\drivers\`
fmt.Println(strings.Split(a, "\\")) //strings包
包含
strings.Contains(字符串, 子串) //返回布尔值
a := `c:\windows\system32\drivers\`
fmt.Println(strings.Contains(a, "\\")) //strings包
修改
注意
字符串本身是不可变的.也就是你无法在原变量中直接修改字符串的值,包括增加或者得减少.只能重新赋值.
因此,要修改一个字符串,需要先转化为可变的类型:如果
纯英文的,转化为[]byte () byte型切片
中西合壁的,转化为[]rune() rune型切片
改完以后,再重新转回字符串即可
示例如下
s1 := "红萝卜"
s2 := []rune(s1) //转换成单个rune字符切片
s2[0] = '白' //要用字符型的来改.
fmt.Println(string(s2)) //将切片重新拼接成字符串
遍历
如果是纯英文的,可以用for i 来实现遍历
s1 := "hello world!"
for i:= 0; i<len(s1); i++{
fmt.Println(string(s1[i])) //这里要注意下,如果不加string(s1[i]),直接使用s1[i]会使得打印出来的是整型(uint8)
}
如果是中西合壁的字符串,如果用上面的方法来实现会出现乱码,这个时候,我们可以用for range
s1 := "Hello world! 你好,世界!"
for _,v := range s1{
fmt.Println(string(v)) //这里用string(v)的目的同上.同样是为了将一个整型数字转化为字符.
}
go 中,所有 的字符都是整型的方式表示的.因此,要想显示字符,要用string()函数将整型的数值转换成相应的字符.
小作业:
统计一下:"hello world!你好,世界!" 中 中文字的数量
布尔型
只有true/false两种形态.且不是bool型的无法直接转变成bool型,需要自己处理成相应的bool值