Go语言中的字符串类型都是不可变类型,默认使用UTF-8编码。
两种表示形式:
(1)双引号表示
var a = "char"
//定义个字符串变量a,值为 "char"
当然双引号里面也可以是转义字符,八进制表示或十六进制表示。
var a = "中\n国"
var b = "\x61"
var c = "\142"
(2)单引号表示
单引号也可以表示字符串,与双引号的区别是单引号里面的内容原样输出,
var a = "中\n国"
// 输出的结果为 "中\n国" 转义字符回车并不会生效
Go语言同时提供了有符号和无符号的整数类型,其中包括 int8、int16、int32 和 int64 四种大小截然不同的有符号整数类型,分别对应 8、16、32、64 bit(二进制位)大小的有符号整数,与此对应的是 uint8、uint16、uint32 和 uint64 四种无符号整数类型。
此外还有 int ,uint 类型,对应所在机器的CPU字节码待定的长度,机器是32位的那么int就表示有符号32bit大小,机器是64位的int就表示有符号的64bit大小。uint也是同样同理,只不过表示的是无符号的数据类型而已。
uintptr 是属于无符号的数据类型,没有指定bit大小,为什么没有指定大小呢?因为我们日常编码开发过程中压根就不回用到。它用于底层代码编译交互使用。
(1)定义
var a = 10
// 定义一个整型数据类型变量a
顾名思义,浮点型即为小数类型,有 float32(精确到小数点后7位),float64(精确到小数点后15位),
定义:
var f = 3.1415926
var v = 3.0
var v1 float64 = 3.0000000000000001
// 不显示声明数据类型,v 的默认类型是float64, v == v1 返回true, 应为float64后15位以后会忽略。
没错,负数类型就是高中学的负数那种,有实部与虚部。go语言中的复数类型有两种:complex64,complex128
定义:
// 定义64bit类型复数
a := complex64(2 + 5i)
// 定义128bit类型复数
b := complex(2, 5)
// 定义128bit类型复数
c := complex128(4 +0 5i)
// 获取出复数的虚数部分值
fmt.Printf("%v\n", imag(a))
fmt.Printf("%v\n", imag(b))
fmt.Printf("%v\n", imag(c))
fmt.Printf("%v\n", real(c))
与其他编程语言的bool类型一样,几乎没有区别,即,真值(true) 假值(false)
(1)定义:
// 定义一个bool类型b 值为true
var b = true
// 定义一个bool类型c 值为false
c := false
(2)与字符串类型互相转换
// string 转 bool
// 字符串可以是 "1", "t", "T", "true", "TRUE", "True","0", "f", "F", "false", "FALSE", "False" 中的任何一个
var b = "true"
v,err := strconv.ParseBool(b)
// bool 类型转string
f := false
v := strconv.FormatBool(f)
// 如果 f 值为false,返回字符串“false” ;值为true 返回字符串“true”
UTF-8字符的一个序列即为字符串。ASCII表1个码值占用1个字节。所以1个字节最多可以表示127个ASCII值,1个中文则有3个字节表示。
byte类型
byte是uint8的别名
rune类型
rune类型是int32类型别名
因为golang中字符串其实是可以看成是两种形态,一种是字节类型,一种是字符类型;类型定义好字符串之后是不能够修改的,假设你有个字符串 str := “中guo”,你想对字节进行修改,那么你就可以把str先转换位[]byte , 如下:
str := "123abc"
strByte := []byte(str)
fmt.Print(string(strByte)) // 输出 “123abc”
strByte[0] = 65
fmt.Print(string(strByte)) // 输出 “A23abc”
str2 := "中国123"
strRune := []rune(str2)
fmt.Print("%#v",string(strRune))// 输出"中国123"
strRune[0] = 65
fmt.Print("%#v",string(strRune))// 输出"A国124"
总结:
(1)你想修改一个字符串中的某一个字符,可以先把字符串转为 []rune,然后根据下标进行修改;
(2)你想修改一个字符串中的某一个字节,可以先把字符串转为 []byte,然后根据下标进行修改;