特别注意 : Go 语言中任何导入的包或者创建的变量如果不使用的话,会报错 ! 所以一旦你导入了某个包或者创建了某个变量就一定要使用, 否则的话会报错, 编译也不会通过
一. 变量的快速入门
Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性
1.1 创建第一个变量
package main
import ("fmt")
func main() {
// 创建变量的第一种方式
var a int
var b int = 10
fmt.Println(a)
fmt.Println(b)
}
// 结果
0
10
需要注意的是,Go语言和许多编程语言不同,它在声明变量时将变量的类型放在变量的名称之后。这样做的好处就是可以避免像C语言中那样含糊不清的声明形式,例如:int* a, b;
。其中只有 a 是指针而 b 不是。如果你想要这两个变量都是指针,则需要将它们分开书写。而在 Go 中,则可以和轻松地将它们都声明为指针类型:
二. 创建变量的两种方式
2.1 标准格式 : 使用 var 创建
package main
import ("fmt")
func main() {
// 创建变量的第一种方式
var a int
// 创建时赋初始值
var b int = 10
// 批量创建
var (
a1 int = 12
a2 string ="aaa"
)
// 创建时让编译器自动识别类型
var a3 = 12
fmt.Println(a)
fmt.Println(b)
fmt.Println(a1)
fmt.Println(a2)
fmt.Println(a3)
// 创建变量的第二种方式
}
2.2 简易格式 : 变量名 := 初始值
package main
import ("fmt")
func main() {
// 创建变量的第二种方式
c := 1
// 同时创建多个变量
d1,d2 := 12,"cc"
fmt.Println(c)
fmt.Println(d1)
fmt.Println(d2)
}
因为简洁和灵活的特点,简短变量声明被广泛用于大部分的局部变量的声明和初始化。var 形式的声明语句往往是用于需要显式指定变量类型地方,或者因为变量稍后会被重新赋值而初始值无关紧要的地方
2.3 Go变量使用注意事项
- 当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 等。所有的内存在 Go 中都是经过初始化的。
- 变量的命名规则遵循骆驼命名法,即首个单词小写,每个新单词的首字母大写,例如:numShips 和 startDate
- 一般使用简易格式创建变量
2.4 + 号的使用
- 当两边都是数值型时, 做加法运算
- 当两边是字符串时, 做字符拼接操作
三. 变量的基本类型
3.1 字符类型 string
// 1.string
str := "哈哈哈哈哈"
fmt.Println(str)
就是基本的字符串类型. 注意 : string 是基本类型, 大小默认是 16字节 (不是很确定! ) 在别的语言中 比如 Java中string 并不是一个基本类型, 但是在 GO中 string是基本类型
注意 : 在使用 string 类型的时候, 如果使用 var 定义的时候不赋初值 则默认值是 “” 也就是空字符串
3.2 Bool 类型
这个就是基本的 布尔类型
//2. bool
boolearn := true
fmt.Println(boolearn)
3.3 整数类型
(1) 有符号整数 int
**
Go 语言中没有 short ,long 类型 , 取而代之的是 int , int8 int16 , int32 , int64 类型
int 默认与 本机的位数是一样的, 比如我的电脑是 64位的, int 就是 64位也就是 8字节大小的
int8 后面的 8是指 8 位 , 也就是一个字节 大小范围就是 -128 ~ 127 ,其他以此类推
package main
import (
"fmt"
"math"
"unsafe"
)
func main(){
//3. int 默认与当前主机的位数有关 , 比如我的电脑是 64位的 , 则 int 就是64位的
var i int = math.MaxInt64
// 1个字节的 整数类型, int8 后面的8是指 8位
var i8 int8 = math.MaxInt8
// 2个字节的 整数类型 16指 16位
var i16 int16 = math.MaxInt16
var i32 int32 = math.MaxInt32
var i64 int64 = math.MaxInt64
fmt.Println(i)
fmt.Println(i8)
fmt.Println(i16)
fmt.Println(i32)
fmt.Println(i64)
fmt.Println("int 类型的字节大小 :", unsafe.Sizeof(i))
}
(2) 无符号整数 uint
**
无符号整数所有的位都作为数值位, 所以没有负数 , 和 有符号整数相比基本类型, 区别是取值范围
比如 uint8 类型的数 取值范围是 0 255 , int8 类型数 取值范围是 -128 ~ 127
package main
import (
"fmt"
"math"
)
func main(){
var ui uint = math.MaxUint64
var ui8 uint8 = math.MaxUint8
var ui16 uint16 = math.MaxUint16
var ui32 uint32 = math.MaxUint32
var ui64 uint64 = math.MaxUint64
fmt.Println(ui)
fmt.Println(ui8)
fmt.Println(ui16)
fmt.Println(ui32)
fmt.Println(ui64)
}
3.4 整数类型注意事项 [重要]
- Go语言的数值类型分为以下几种:整数、浮点数、复数,其中每一种都包含了不同大小的数值类型,例如有符号整数包含 int8、int16、int32、int64 等,每种数值类型都决定了对应的大小范围和是否支持正负符号。本节我们主要介绍一下整数类型。
- Go语言同时提供了有符号和无符号的整数类型,其中包括 int8、int16、int32 和 int64 四种大小截然不同的有符号整数类型,分别对应 8、16、32、64 bit(二进制位)大小的有符号整数,与此对应的是 uint8、uint16、uint32 和 uint64 四种无符号整数类型。
- 此外还有两种整数类型 int 和 uint,它们分别对应特定 CPU 平台的字长(机器字大小),其中 int 表示有符号整数,应用最为广泛,uint 表示无符号整数。实际开发中由于编译器和计算机硬件的不同,int 和 uint 所能表示的整数大小会在 32bit 或 64bit 之间变化。
- 大多数情况下,我们只需要 int 一种整型即可,它可以用于循环计数器(for 循环中控制循环次数的变量)、数组和切片的索引,以及任何通用目的的整型运算符,通常 int 类型的处理速度也是最快的。
- 用来表示 Unicode 字符的 rune 类型和 int32 类型是等价的,通常用于表示一个 Unicode 码点。这两个名称可以互换使用。同样,byte 和 uint8 也是等价类型,byte 类型一般用于强调数值是一个原始的数据而不是一个小的整数。
-
最后,还有一种无符号的整数类型 uintptr,它没有指定具体的 bit 大小但是足以容纳指针。uintptr 类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。
-
尽管在某些特定的运行环境下 int、uint 和 uintptr 的大小可能相等,但是它们依然是不同的类型,比如 int 和 int32,虽然 int 类型的大小也可能是 32 bit,但是在需要把 int 类型当做 int32 类型使用的时候必须显示的对类型进行转换,反之亦然。
-
Go语言中有符号整数采用 2 的补码形式表示,也就是最高 bit 位用来表示符号位,一个 n-bit 的有符号数的取值范围是从 -2****** 到 2********-1。无符号整数的所有 bit 位都用于表示非负数,取值范围是 0 到 2********。例如,int8 类型整数的取值范围是从 -128 到 127,而 uint8 类型整数的取值范围是从 0 到 255。**
3.5 浮点数类型
浮点数类型包括 float32 和 float64 两种类型
package main
import "fmt"
func main(){
// 1. float32 位 精度为 6位
var f1 float32 = 0.12
// 浮点数在声明的时候可以省略整数或者小数部分
// 但是 建议不要这么写, 看着别扭
var f2 float32 = .12
var f3 float32 = 1.
fmt.Println(f1 ," | ", f2 , " | " , f3)
//2. float64 位 精度位 15位
var d1 float64 = 12.2
fmt.Println(d1)
var f float32 = 16777216 // 1 << 24
fmt.Println(f == f+1) // "true"!
///3. 可以使用科学计数法声明浮点数
var d2 float64 = 3.1415926e13
// 4. 可以像 C 语言那样指定 打印多少位
fmt.Printf("%.2f" , d2)
}
这些浮点数类型的取值范围可以从很微小到很巨大。浮点数取值范围的极限值可以在 math 包中找到:
- 常量 math.MaxFloat32 表示 float32 能取到的最大数值,大约是 3.4e38;
- 常量 math.MaxFloat64 表示 float64 能取到的最大数值,大约是 1.8e308;
- float32 和 float64 能表示的最小值分别为 1.4e-45 和 4.9e-324。
一个 float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十进制数的精度,通常应该优先使用 float64 类型,因为 float32 类型的累计计算误差很容易扩散,并且 float32 能精确表示的正整数并不是很大。
var f float32 = 16777216 // 1 << 24
fmt.Println(f == f+1) // "true"!
ads