Go入门系列(二)基本数据类型
2020-02-24 本文已影响0人
RabbitMask
目录:
一、数据类型
二、常量变量
一、数据类型
对比python,我们必须意识到GoLang是一门强类型语言。
1、布尔型
在 Go 中,布尔值的类型为 bool,值是 true 或 false,默认为 false。
func main() {
var a bool
fmt.Println(a)
}
#输出
false
2、数字类型
- 整型
类型 取值范围
int8 -128到127
uint8 0到255
int16 -32768到32767
uint16 0到65535
int32 -2147483648到2147483647
uint32 0到4294967295
int64 -2^(64-1)到2^(64-1)-1
uint64 0到2^64-1
所谓无符号类型即为非负类型。
- 浮点型
float32和float64.它们的算术规范由IEEE754浮点数国际标准定义, 该浮点数规范被所有现代的CPU支持。 - 复数
complex64和complex128,分别对应float32和float64两种浮点数精度。内置的complex函数用于构建复数,内建的real和imag函数分别返回复数的实部和虚部。
func main() {
var x complex64 = complex(1, 2)
var y complex64 = complex(3, 4)
fmt.Println(x*y)
fmt.Println(real(x*y))
fmt.Println(imag(x*y))
}
#输出
(-5+10i)
-5
10
- 其它
byte 与uint8等价
rune 与int32等价
uint 取值位数等于cpu位数(32/64)
int 取值位数等于cpu位数(32/64)
uintptr 无符号整型,用于存放一个指针
在go>=1.9时,对于数字类型,无需定义int及float32、float64,系统会自动识别。
尤其是int类型,在使用goland时,会直接给予“类型可忽略”的提示。
func main() {
var a =1
var b =1.3333
fmt.Println(a,b)
}
#输出
1 1.3333
讲到这里,想顺便提一下go的一个特性,严格的内存管理。在之前做白盒测试的时候,有一个低风险项:声明但未使用,严格来讲对系统并没有直接危害,但确实对内存真实的浪费。这个问题在Go这里不再纠结了,如果声明却不使用,语法检查不会通过。
func main() {
var a =1
var b =2
fmt.Println(a)
}
#输出
# command-line-arguments
b declared and not used
3、字符串类型
- 定义
同样,我们可以看到字符串的声明是不需要特别声明类型的。
对比python,字符串类型必须使用双引号,单引号不可。

此外,多行声明须使用反引号,但是这个时候转义符不再生效,/允悲。
func main() {
var a =`终究
还是一个人
扛下了所有`
fmt.Println(a)
}
#输出
终究
还是一个人
扛下了所有
- 组合
支持加号连接,尽可能灵活即可。
func main() {
var a = "rabbit"
var b = "mask"
a += b
fmt.Println(a+"!")
}
#输出
rabbitmask!
二、常量变量
1、变量
上面交代了那么久的数据类型,最终还是为这里服务的,最基础的变量定义方式为:var identifier type
,此外也可灵活运用贴合Go的习惯。
- 定义类型而不初始化
变量默认为零值,当然布尔型默认为false上面已经提过了。 - 直接初始化自动判定变量类型
这个无论是上面的int还是字符串都很好的体现了这一点。 - 省略 var,
identifier := value
格式替代。这种不带声明格式的只能在函数体中出现,不可以用于全局变量的声明与赋值,使用操作符:=
可以高效地创建一个新的变量,称之为初始化声明。同第二种方式,其类型根据初始化数值自动判定。
func main() {
a := "rabbitmask"
fmt.Println(a)
}
#输出
rabbitmask
2、常量
定义方式为const identifier [type] = value
同样,可省略type自动判定。
支持批量常量定义,未赋值则默认为前面的初始值。
func main() {
const (
a=1
b=2
c
d
)
fmt.Println(a,b,c,d)
}
- iota 常量生成器
此外可借助iota批量生成常量。
func main() {
type num int
const (
a num=iota
b
c
d
)
fmt.Println(a,b,c,d)
}
#输出
0 1 2 3