布尔类型 bool
布尔类型的值只能是常量 true
或者 false
。
var b bool = true
var c = false
布尔类型和数字 0,1 不能直接转换,必须通过编程实现,if
和 for
语句的条件部分都是布尔类型。
// btoi returns 1 if b is true and 0 if false.
func btoi(b bool) int {
if b {
return 1
}
return 0
}
整数类型
golang 提供了多种大小的整数类型,也区分了有符号数和无符号数。
几种确定范围的整数类型:
uint8 8-bit 0 to 255
uint16 16-bit 0 to 65535
uint32 32-bit 0 to 4294967295
uint64 64-bit 0 to 18446744073709551615
int8 8-bit -128 to 127
int16 16-bit -32768 to 32767
int32 32-bit -2147483648 to 2147483647
int64 64-bit -9223372036854775808 to 9223372036854775807
byte uint8 的别名
rune int32 的别名
byte 是 uint8 的等价类型,一般用来表示一个原始的数据而不是一个小的整数
rune 是 int32 的等价类型,通常用于表示一个Unicode码点
还有 3 个依赖于编译器具体实现和平台架构的类型:
uint 32-bit or 64-bit
int 32-bit or 64-bit
uintptr 没有指定大小,要求足以容纳指针,底层编程时需要
不同类型之间如果进行运算,需要进行显示的强制类型转换,语言本身不会做隐示类型转换。
浮点数
golang 中的浮点数同样也是依据 IEEE-754 标准,提供了两种类型的浮点数。
float32 32-bit +-1e-45 to +- 3.4e38 精确到小数点后 7 位
float64 64-bit +-4.9e-324 to 1.8e308 精确到小数点后 15 位
float64 类型表示的范围更广,精度更高,应该尽可能使用该类型。
math 包中的相关函数都要求 float64 类型
复数
golang 中也提供了复数类型。
complex64 64-bit 实部和虚部都是 float32
complex128 128-bit 实部和虚部都是 float64
复数的通用表示方式:re + imI
。re
代表实部,im
代表虚部。
内置函数 real()
和 imag()
可以用来获取复数的实部和虚部。
字符串
golang 中提供了字符串类型 string
。字符串有两种字面值表示方式:
var a = "hello, world!\n" // 双引号括起来,转义字符会被解释
var b = `hello, world!\n` // 反引号括起来,所有字符原样输出
golang 中的字符串是不可变字符串,一旦创建不可修改。
var a = "hello, world!"
a[1] = 'H' // 错误,cannot assign to a[1]
空字符串是指长度为 0 的字符串,可以使用内置函数 len()
获取字符串中的字节数目。
var a = "hello" // len(a) == 5
var b = "" // len(b) == 0
字符串是采用 UTF-8
编码的,该编码有一个特点就是占用的字节长度是不确定的。
ASCII
码,也就是前 256 个字符占用 1 个字节,其他字符根据情况占用 2 ~ 4
个字节。
字符串支持按下标索引取对应的字节,但是这种情况对纯 ASCII
码字符串才有意义,下标索引要满足 0 <= index < len(s)
。
var s = "hello, world"
fmt.Printf("%c", s[0]) // h
支持切片截取操作 s[i:j]
截取从 i
到 j
(不包含j)的字符生成一个新的字符串。
var s = "hello, world"
fmt.Println(s[0:5]) // hello
支持字符串连接操作 +
两个字符串相加得到一个新的字符串。
var s = "hello,"
fmt.Println(s + "world") // hello,world
支持字符串相等比较 ==
按顺序进行字典序比较
参考资源: