本文是李文周的博客go语言学习之路的目录提要版,方便复习查看使用,原文参见文章连接:
https://www.liwenzhou.com/posts/Go/02_datatype/
Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。
基本数据类型总结
整型 int8-int64,unit8-unit64, int和uint根据操作系统确定内存范围,对应printf表示%d
浮点型 float32, float64 对应printf表示%f
复数: complex64和complex128
布尔值:bool, true 和false,默认false, 布尔值无法参与数值运算,也无法与其他类型进行转换。
字符串:内部实现使用UTF-8
编码。
- 多行字符串,
反引号
- 常见操作:len(str), strings.Split, strings.contains, strings.HasPrefix, strings.HasSuffix, strings.Index(), strings.LastIndex(), strings.Join(a []string, sep string)
字符(byte和rune类型)
Go 语言的字符有以下两种:
-
uint8
类型,或者叫 byte 型,代表了ASCII码
的一个字符。 -
rune
类型,代表一个UTF-8字符
。当需要处理中文、日文或者其他复合字符时,则需要用到
rune
类型。rune
类型实际是一个int32
。
// 遍历字符串
func traversalString() {
s := "hello沙河"
for i := 0; i < len(s); i++ { //byte
fmt.Printf("%v(%c) ", s[i], s[i])
}
fmt.Println()
for _, r := range s { //rune
fmt.Printf("%v(%c) ", r, r)
}
fmt.Println()
}
修改字符串:
要修改字符串,需要先将其转换成[]rune
或[]byte
,完成后再转换为string
。无论哪种转换,都会重新分配内存,并复制字节数组。
func changeString() {
s1 := "big"
// 强制类型转换
byteS1 := []byte(s1)
byteS1[0] = 'p'
fmt.Println(string(byteS1))
s2 := "白萝卜"
runeS2 := []rune(s2)
runeS2[0] = '红'
fmt.Println(string(runeS2))
}
类型转换:
Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。
强制类型转换的基本语法如下:
T(表达式)
比如计算直角三角形的斜边长时使用math包的Sqrt()函数,该函数接收的是float64类型的参数,而变量a和b都是int类型的,这个时候就需要将a和b强制类型转换为float64类型。
func sqrtDemo() {
var a, b = 3, 4
var c int
// math.Sqrt()接收的参数是float64类型,需要强制转换
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c)
}