布尔型
布尔型的关键字是bool,只有两个值true和false,true和false是Go内置的两个预声明标识符。
// 声明bool型变量var ok boolok = true// 布尔型和整型数据不能相互比较var a int = 1var b bool = truea == b // ❌ 不能进行比较// 比较表达式和逻辑表达式的结果都是布尔型数据var b bool = (x > y) && (x > 0)// 声明布尔型变量如果不指定初始值,则默认为falsevar b bool // b == false
整型
Go语言中内置了12中整型类型,分别是:byte、int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、uintptr。其中byte是uint8的别名,不同类型的整型必须进行强制类型转换。
// 有符号整型int8 // -128~127int16 // -32768~32767int32 // -2147483648~2147483647int64 // -9223372036854775808~9223372036854775807// 无符号整型uint8 // 0~255uint16 // 0~65535uint32 // 0~4294967295uint64 // 0~18446744073709551615// 取决于系统位数intuint// 特殊类型uintptr // 无符号整型,由系统决定占用位大小,足够存放指针即可,和C库或者系统接口交互var a int = 1var b int32 = 2b = a // 不同类型的整型必须进行强制转换// 整型支持算术运算和位操作var a int = (1 + 2) * 3var b int = 1000>>2
浮点型
Go语言中设置两个浮点数类型,分别是float32和float64
- 浮点型字面量被自动类型推断为
float64 - 计算机很难进行浮点数的精确表示和比较,因此两个浮点数之间不应该使用
==或!=进行比较操作。 - 浮点型数据在内存中的分配

var b := 10.00 // float64 10.00
复数类型
Go语言内置的复数烈性有两种,分别是complex64 和 complex128,复数在计算机里面使用2个浮点数表示,一个表示实部一个表示虚部。
var value complex128 = 3.1 + 5ivalue1 != 3.2 + 6i// Go有三个内置函数处理复数var v = complex(1.2, 3) // 构造一个复数a := real(v) // 返回复数实部b := imag(v) // 返回复数虚部
字符串
- 字符串是常量,可以通过类似数组的索引访问其字节单元,但是不能修改某个字节的值
- 字符串转换为切片
[]byte要慎重,尤其是当数据量较大时(每次转换都需赋值内容) - 字符串尾部不包含
NULL,这一点和C/C++不一样 - 字符串类型底层实现是一个二元的数据结构,一个是指针指向字节数组的起点,另一个是长度
- 基于字符串创建的切换和原字符串指向相同的底层字符数组,一样不能修改,对字符串的切片操作返回的子串仍然是
string,而非slice - 字符串和切片的转换:字符串可以转换为字节数组,也可以转换为
Unicode的字数组 ```go // 定义一个字符串 var a = “hello world”
b := a[0] // 通过索引访问字节单元 a[1] = “m” // ❌ 不能修改某个字节的值
s := []byte(a) // 字符串转换为字节数组
// 字符串的slice操作 c := a[0, 4] d := a[1:] e := a[:4]
// 字符串拼接 f := d + e; len(f) // 使用len函数计算字符串长度
g := “hello, 世界” for i :=0;i<len(g);i++ { // 遍历字节数组 fmt.Println(d[i]) }
for i, v := range g { // 遍历rune数组 fmt.Println(i, v) } ```
