声明变量
var声明
var name type
和 var name type = value
以及批量定义
var name1, name2 = value1, value2
var (
a int
b string
c []float32
d func() bool
e struct {
x int
}
)
:=海象符
name := value
相比更简单,但需要注意以下问题
- 必须赋值
- 必须是新变量
- 不能提供数据类型
- 只能用在函数内部
name, age := value1, value2
等号的左边必须含有至少一个新变量才可以。可以有已存在的变量。
编译器推导类型
var num = 100
如这种格式,100
显然是int类型
,这是编译器会根据这点自动推导出num的类型,标注var num int = 100
是没有必要的。
_ 匿名变量
当有多个返回值,但其中有一些不想接收时,可以用匿名变量来解决。
return 1, 2, 3, 4
→ a, _, c, d = function()
这样我们只会接收到1, 3, 4
三个值,而2
将会被抛弃,且不占内存。
数据类型
整数类型
两种整数类型 int
和 uint
,它们分别对应特定 CPU 平台的字长(机器字大小)
他们衍生出int8, int16, int32, int64, uint64, uint32, uint16, uint8
等类型。
用来表示 Unicode
字符的 rune
类型和 int32
类型是等价的,通常用于表示一个 Unicode 码点
。这两个名称可以互换使用。同样,byte
和 uint8
也是等价类型,byte
类型一般用于强调数值是一个原始的数据而不是一个小的整数。
哪些情况下使用 int 和 uint
程序逻辑对整型范围没有特殊需求。例如,对象的长度使用内建 len()
函数返回,这个长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用 int 来表示。
反之,在二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint。
小数类型
一个 float32
类型的浮点数可以提供大约 6 个十进制数的精度,而 float64
则可以提供约 15 个十进制数的精度,通常应该优先使用 float64
类型,因为 float32 类型的累计计算误差很容易扩散,并且 float32
能精确表示的正整数并不是很大。
const e = .71828
或const f = 1.
两种情况,小数点前或后可以自动省略
布尔类型
true
& false
只有两个相同类型的值才可以进行比较,如果值的类型是接口,那么它们也必须都实现了相同的接口。如果其中一个值是常量,那么另外一个值可以不是常量,但是类型必须和该常量类型相同。如果以上条件都不满足,则必须将其中一个值的类型转换为和另外一个值的类型相同之后才可以进行比较。
布尔值可以和 &&(AND)和 ||(OR)操作符结合,并且有短路行为,如果运算符左边的值已经可以确定整个布尔表达式的值,那么运算符右边的值将不再被求值.
&&的优先级比||高(&& 对应逻辑乘法,|| 对应逻辑加法,乘法比加法优先级要高)
布尔值并不会隐式转换为数字值 0 或 1
有疑问加站长微信联系(非本文作者)