# Go 语言基本概念-标识符-数据类型-变量-常量
- 关键字或保留字
| 1 | 2 | 3 | 4 | 5 |
| :---- | :---- | :---- | :---- | :---- |
| break | default | func | interface |select|
| case | defer | go | map |struct|
| chan | else | goto | package |switch|
| const | fallthrough | if | range |type|
| continue | for | import| return |var|
- 预定义标识符
| 1 | 2 | 3 | 4 | 5 |
| :---- | :---- | :---- | :---- | :---- |
| append | copy | print | println | real |
| bool | byte | string | uintptr | new |
| true | false | iota | nil | panic |
| int | int8 | int16 | int32 | int64|
| uint | uint8 | uint16 | uint32 | uint64|
| complex | complex64 | complex128 | float32 | float64|
| cap | close | imag | make | len|
| recover | | | | |
- 数据类型
- 布尔型
- 数值类型
- 字符串类型
- 派生类型(指针、数组、结构体、Channel、函数、切片、interface、Map 类型)
数值类型中 rune 类型,类似 int32;uintptr 无符号整形,用于存放一个指针。
派生类型中,channel、切片、interface、Map 类型比较陌生。
- 变量
```
var identifier type // 定义一个 identifier 变量,类型为 type,变量没有初始化,默认为 0。
var identifier1, identifier2 type // 定义多个类型为 type 的变量
var v_name = value // 带初始值的变量声明,省略了类型,编译器自动判断
v_name := value // 省略 var 的变量声明,左侧必须为未声明的变量,智能用于函数体中,不能用于声明全局变量。这种声明称为初始化声明。
// 这种因式分解关键字的写法一般用于声明全局变量
var (
vname1 v_type1
vname2 v_type2
)
```
注意区分值类型和引用类型。
空白标识符 `_`,是只写的,常用于抛弃值。
- 常量
常量在程序运行过程中不能被修改。
```
const identifier [type] = value
const c_name1, c_name2 = value1, value2
```
常量还可以用作枚举:
```
const (
Unknown = 0
Female = 1
Male = 2
)
```
- 特殊常量 iota
iota,可以认为是一个可以被编译器修改的常量。参考[菜鸟教程](https://www.runoob.com/go/go-constants.html)。
- 关于 `unsage.Size(字符串)` 表达式的返回值问题
go 语言的 string 是一种数据类型,这个数据类型占用 16 字节空间,前 8 字节是一个指针,指向字符串值的地址,后八个字节是一个整数,标识字符串的长度;注意 go 语言的字符串内部并不以 '\0' 作为结尾,而是通过一个长度域来表示字符串的长度。
有疑问加站长微信联系(非本文作者)