参考:
基本类型和运算符
表达式是一种特定的类型的值,它可以由其它的值以及运算符组合而成。 每个类型都定义了可以和自己结合的运算符集合。
只有两个类型相同的值才可以和二元运算符结合。
Go 是强类型语言,因此不会进行隐式转换,任何不同类型之间的转换都必须显式说明。
Go 不存在像 C 和 Java 那样的运算符重载。
布尔类型 bool
var b bool = true
Go 对于值之间的比较有非常严格的限制,只有两个 类型相同 的值才可以进行比较,如果值的类型是接口(interface,第 11 章),它们也必须都实现了相同的接口。
在 Go 语言中,&& 和 || 是具有快捷性质的运算符,当运算符左边表达式的值已经能够决定整个表达式的值的时候(&& 左边的值为 false,|| 左边的值为 true),运算符右边的表达式将不会被执行。利用这个性质,如果你有多个条件判断,应当将计算过程较为复杂的表达式放在运算符的右侧以减少不必要的运算。
在格式化输出时,你可以使用
%t
来表示你要输出的值为布尔型。
对于布尔值的好的命名能够很好地提升代码的可读性,例如以 is 或者 Is 开头的
isSorted
、isFinished
、isVisible
,使用这样的命名能够在阅读代码的获得阅读正常语句一样的良好体验,例如标准库中的unicode.IsDigit(ch)
(第 4.5.5 节)。
数字类型
整型 int 和浮点型 float
Go 语言支持整型和浮点型数字,并且原生支持复数。
Go 也有基于架构的类型,例如:int、uint 和 uintptr。
- int 和 uint 在 32 位操作系统上,它们均使用 32 位(4 个字节),在 64 位操作系统上,它们均使用 64 位(8 个字节)。
- uintptr 的长度被设定为足够存放一个指针即可。
Go 语言中没有 float 类型。
与操作系统架构无关的类型:
- int8(-128 -> 127)
- int16(-32768 -> 32767)
- int32(-2,147,483,648 -> 2,147,483,647)
- int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
- uint8(0 -> 255)
- uint16(0 -> 65,535)
- uint32(0 -> 4,294,967,295)
- uint64(0 -> 18,446,744,073,709,551,615)
- float32(+- 1e-45 -> +- 3.4 * 1e38)
- float64(+- 5 * 1e-324 -> 107 * 1e308)
float32 精确到小数点后 7 位,float64 精确到小数点后 15 位。由于精确度的缘故,你在使用 == 或者 != 来比较浮点数时应当非常小心。
你应该尽可能地使用 float64,因为 math 包中所有有关数学运算的函数都会要求接收这个类型。
通过增加前缀 0 来表示 8 进制数(如:077),增加前缀 0x 来表示 16 进制数(如:0xFF),以及使用 e 来表示 10 的连乘(如: 1e3 = 1000,或者 6.022e23 = 6.022 x 1e23)。
Go 中不允许不同类型之间的混合使用,但是对于常量的类型限制非常少,因此允许常量之间的混合使用。
package main
func main() {
var a int
var b int32
a = 15
b = a + a // 编译错误
b = b + 5 // 因为 5 是常量,所以可以通过编译
}
格式化说明符:
在格式化字符串里,%d 用于格式化整数(%x 和 %X 用于格式化 16 进制表示的数字),%g 用于格式化浮点型(%f 输出浮点数,%e 输出科学计数表示法),%0d 用于规定输出定长的整数,其中开头的数字 0 是必须的。
%n.mg 用于表示数字 n 并精确到小数点后 m 位,除了使用 g 之外,还可以使用 e 或者 f,例如:使用格式化字符串 %5.2e 来输出 3.4 的结果为 3.40e+00。
数字值转换:
当进行从取值范围较大的类型转换为取值范围较小的类型的转换时,小数点后的数字将被丢弃。可以写一个专门用于处理类型转换的函数来确保没有发生精度的丢失。
复数:
complex64 (32 位实数和虚数)
complex128 (64 位实数和虚数)
复数使用
re+imI
来表示,其中 re 代表实数部分,im 代表虚数部分,I 代表根号负 1。
var c1 complex64 = 5 + 10i
fmt.Printf("The value is: %v", c1)
// 输出: 5 + 10i
如果 re 和 im 的类型均为 float32,那么类型为 complex64 的复数 c 可以通过以下方式来获得:
c = complex(re, im)
函数
real(c)
和imag(c)
可以分别获得相应的实数和虚数部分。
在使用格式化说明符时,可以使用
%v
来表示复数,但当你希望只表示其中的一个部分的时候需要使用%f
。