📜本文内容
🐵基础类型
布尔型
类型 |
内存占用大小 |
取值范围 |
bool |
1字节 |
true和false |
数值类型
🐒1.无符号整型
类型 |
内存占用大小 |
取值范围 |
uint8又称byte |
1字节 |
0~255 |
uint16 |
2字节 |
0~65535 |
uint32 |
4字节 |
0~4294967295 |
uint64 |
8字节 |
0~18446744073709551615 |
🐒2.有符号整型
类型 |
内存占用大小 |
取值范围 |
int8 |
1字节 |
-128~127 |
int16 |
2字节 |
-32768~32767 |
int32 |
4字节 |
-2147483648~2147483647 |
int64 |
8字节 |
-9223372036854775808~9223372036854775807 |
注:Golang中的int在未明确指定位数时,默认为int32
🐒3.浮点型
类型 |
内存占用大小 |
取值范围 |
float32 |
4字节 |
1.4e-45~3.4e38 |
float64 |
8字节 |
4.9e-324~1.8e308 |
字符串
Go中的字符串由字节组成,不可变类型,使用UTF-8编码
常用处理字符串的包
- strconv:提供了多种数值与字符串转化的函数
- strings:提供多种字符串处理的方法
基础类型默认取值
错误类型
🐵变量
- 声明形式:
var [变量名] [变量类型]
: var name string
new
: b := new(bool)
new
会分配被置零的存储,在此b
的值为false
make
: make(chan bool)
新建map
、slice
、channel
类型的数据
- 注意:
- 关键字不能作为变量名,例如const/var/import等
- 首字母大写则该变量可导出
- 函数内声明的为局部变量,全局变量则在import语句后作声明
- 初始化:
- 未手动赋值,变量被初始化成默认值,
int:0
,string:""
,bool:false
指针变量
🐒1.* 和 & 的区别
& |
* |
取地址符号 |
指针运算符 |
对变量取地址 |
一个变量是指针类型 指针变量所处的存储单元
|
a = *&a |
a = &&&&*&a |
*&可以相互抵消,&*不可以抵消
指向指针的指针
1
2
3
|
i = 1
var ptr *int = &i
var pptr **int = &ptr
|
ptr |
pptr |
ptr是一个指针变量ptr的类型是*int |
pptr是一个指针变量pptr的类型是**int,也是&ptr |
*ptr = 1 |
**pptr = 1 |
变量命名
推荐阅读:驼峰命名法
变量声明程序例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package main
import "fmt"
type qq int
type pp float32
func main() {
// 用var声明变量,用 = 赋值,Go会自动检测变量的类型
var name = "haha"
fmt.Println(name)
// 省略var关键字,用 := 初始化,Go会自动检测变量的类型
name1 := "hahaha"
fmt.Println(name1)
var a, b = 1, 2
var c, d = 3, "ha"
fmt.Println(a, b, c, d)
//默认初始化为0
var a1 qq
fmt.Println(a1)
var s1 pp
fmt.Println(s1)
}
|
1
2
3
4
5
|
haha
hahaha
1 2 3 ha
0
0
|
变量生命周期
- 包级别变量:整个程序执行过程
- 局部变量:每次执行声明时建立一个实体,一直生存到它不可访问,函数的参数和返回值都是局部变量,不可访问后,其实体所占的内存空间将被收回
值类型和引用类型
值类型 |
引用类型 |
基本数据类型数组结构体 |
指针slicemapchannelinterface |
变量直接存储值,内存通常在栈中分配 |
变量存储的值是一个地址,这个地址对应的空间 才真正存储数据,内存通常在堆上分配,当没有任何变量引用这个地址时,会被GC回收 |
🐵常量
- 常量是无法改变的,在声明时就已确定好具体的值,通常包含基本数据类型和字符串类型
- 用关键字const修饰
- 常量可作枚举
常量定义
1
2
3
4
5
6
7
8
|
pacakge main
import "fmt"
const(
Country = "China"
Weight = 10
)
|
常量模拟枚举
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package main
import "fmt"
type Weight int
const (
State1 Weight = iota //开始生成枚举常量,State1为0
State2
State3
State4
State5
)
func main() {
fmt.Printf("%d, %d, %d, %d, %d\n",State1, State2, State3, State4, State5)
var level Weight = State5
fmt.Printf("level is: %d\n",level)
}
|
1
2
|
0, 1, 2, 3, 4
level is: 4
|