diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..73f69e0958611ac6e00bde95641f6699030ad235
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..639900d13c6182e452e33a3bd638e70a0146c785
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b3b6543b48d4e9acc1a9d04fdaac3803463ab894
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/practical-go-lessons.iml b/.idea/practical-go-lessons.iml
new file mode 100644
index 0000000000000000000000000000000000000000..d6ebd4805981b8400db3e3291c74a743fef9a824
--- /dev/null
+++ b/.idea/practical-go-lessons.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/chap-8-variables-constants-and-basic-types/8-example.md b/chap-8-variables-constants-and-basic-types/8-example.md
new file mode 100644
index 0000000000000000000000000000000000000000..6c0c808f3ae4d798d7440b92aed89c219ebffbf7
--- /dev/null
+++ b/chap-8-variables-constants-and-basic-types/8-example.md
@@ -0,0 +1,577 @@
+# 第八章:变量,常量和基本类型
+
+![Variables, constants and basic types](imgs/variables-consts.1cf1af40.jpg)
+
+## 1 你能在本章节学到什么?
+
+- 什么是变量?我们为什么需要变量?
+- 什么是类型?
+- 如何创建一个变量?
+- 如何给一个变量赋值?
+- 如何使用变量?
+- 什么是常量?常量和变量有什么区别?
+- 如何定义一个常量?
+- 如何使用常量?
+
+## 2 本章节所涵盖的技术概念
+
+- 变量
+- 常量
+- 类型
+- 无类型常量
+
+## 3 变量是内存中的一个空间
+
+变量(variable)是计算机内存中的一个可以包含可变数据的空间。 「variable」一词来自拉丁语「variabilis」,意思是「可变的」。在程序中,我们可以创建变量,这些变量使我们能够存储之后要用到的信息。
+
+例如,我们想要跟踪酒店的客人数量。因为客人的数量是一个会变化的数字,因此我们可以创建一个变量来存储这些信息(参见图 [1](#fig:A-variable-is-space-memory))。
+
+![A variable is a space in computer memory[fig:A-variable-is-space-memory]](imgs/what_is_a_variable.87f49327.png)
+
+变量是内存中的一个空间[fig:A-variable-is-space-memory]
+
+> 本书的纸质版和数字版均可用![更多信息在这里](https://www.practical-go-lessons.com/buy-digital-or-hard-copy)。
+
+## 4 变量存储在哪里?
+
+我们之前讨论过 ROM、RAM 和辅助存储器。Go 变量存储在哪里?答案很简单:你无法选择存储地点。这是编译器的责任,而不是你的责任!
+
+## 5 变量标识符(名称)
+
+在大多数编程语言中(以及在 Go 中),当我们创建一个变量时,我们将它与一个 **标识符** 相关联。标识符是变量的「名称」。给变量赋予标识符可以让我们在程序中快速使用它们。标识符由字母和数字组成。变量的标识符将在程序内部使用,以指定存储在其中的值。标识符必须简短且具有描述性。
+
+创建标识符,程序员可以很有创意。但他们必须遵守这些简单的规则:
+
+1. 标识符由以下元素所组成
+ 1. Unicode 字母[1](#fn1)
+ 1. 例如:A,a,B,b,Ô,...
+ 2. Unicode 数字[2](#fn2)
+ 1. 例如:0,9,3,...
+2. 标识符必须以字母或下划线字符(_)开头。
+3. 某些标识符无法使用,因为它们被语言 **保留**
+ 1. **保留字有**:reak,default,func,interface,select,case,defer,go,map,struct,chan,else,goto,package,switch,const,fallthrough,if,range,type,continue,for,import,return,var
+
+```go
+numberOfGuests
+```
+
+是有效的变量标识符。
+
+```go
+113Guests
+```
+
+是无效的变量标识符,因为它以数字开头。
+
+## 6 基本类型
+
+我们可以将信息存储到变量中。但这样表述是模糊的;我们必须更加精确。我们需要存储数字(1,2000,3)、浮点数(2.45665)、文本("Room 112 non-smoking")吗?变量有一个合法值的集合,我们可以用这个集合给变量分配值。这个集合就是变量的 **类型**。类型是有名称的。
+
+Go 语言预先声明了一组可以立即在程序中使用的基本类型。你也可以定义你的类型(我们稍后会看到)。目前,我们将只关注最常用的类型:
+
+- 字符串:
+ - 类型名:string
+ - 例子:"management office","room 265",...
+- 无符号整数:
+ - 类型名:uint,uint8,uint16,uint32,uint64
+ - 例子:2445,676,0,1,...
+- 整数:
+ - 类型名:int,int8,int16,int32,int64
+ - 例子:-1245,65,78,...
+- 布尔值:
+ - 类型名:bool
+ - 例子:true,false
+- 浮点数:
+ - 类型名:float32, float64
+ - 例子:12.67
+
+### 6.1 关于数字 8、16、32 和 64
+
+你可能已经注意到我们有五种类型的整数:int,int8,int16,int32,int64。无符号整数也是如此。我们有 uint,uint8,uint16,uint32 和 uint64。浮点数的选择更为有限:我们可以使用 float32 或 float64。
+
+如果要存储没有符号的数字,可以使用无符号整数类型。这些类型有 5 种口味:
+
+- uint8
+- uint16
+- uint32
+- uint64
+- uint
+
+除了最后一个,每个都有一个附加的数字。这个数字对应分配给存储它的内存位数。
+
+如果你已阅读过第一章,你就会知道:
+
+- 使用 8 位内存,我们可以存储从 0 到 $2^{7}+2^{6}+...+2^{0}=255$ 的整数
+- 使用 16 位(2 字节)内存,我们可以存储从 0 到 $2^{15}+2^{14}+...+2^{0}=65,535$ 的整数
+- 使用 32 位(4 字节)内存,我们可以存储从 0 到 $2^{31}+2^{30}+...+2^{0}=4,294,967,295$ 的整数
+- 使用 64 位(8 字节)内存,我们可以存储从 0 到 $2^{63}+2^{62}+...+2^{0}=18,446,744,073,709,551,615$ 的整数
+
+你可以注意到,64 位的最大十进制值非常高。记住这一点!如果需要存储不超过 255 的值,请使用 uint8 而不是uint64。否则,你将浪费存储空间(因为你只使用了内存中分配的 64 位中的 8 位!)
+
+最后一种类型是 **uint**。如果你在程序中使用此类型,则为无符号整数分配的内存将 **至少** 为 32 位。这取决于运行程序的系统。如果是 32 位系统,它将相当于 uint32 。如果系统为 64 位,则 **uint** 的存储容量将与 **uint64** 的存储容量相同。(为了更好地理解 32 位和 64 位之间的区别,你可以查看上一章)
+
+## 7 变量声明
+
+如果你想在你的程序中使用一个变量,你需要先声明它。
+
+### 7.1 声明变量时执行的三个动作
+
+当你声明一个变量时,它会:
+
+1. 将 **标识符** 绑定到变量
+2. 将 **类型** 绑定到变量
+3. 将变量值 **初始化** 为 **类型** 的 **默认值**
+
+如果你习惯于前两个动作的编程,那么前两个动作是很常见的。但第三个不是。**Go 为你将变量值初始化为其类型的默认值**。Go中不存在未初始化的变量。
+
+### 7.2 没有初始化的变量声明
+
+![Variable declation syntax[fig:Variable-declation-syntax]](imgs/variable_initialization.a908a70e.png)
+
+变量声明语法[fig:Variable-declation-syntax]
+
+在图 [2](#fig:Variable-declation-syntax) 中,您可以看到如何声明变量。在第一个示例中,我们声明了一个 int 类型的变量 roomNumber。在第二个示例中,我们在同一行中声明两个变量:roomNumber 和 floorNumber。它们是 int 类型的,值将是 0(int 类型的零值)。
+
+```go
+// variables-constants-and-basic-types/declaration-without-initializer/main.go
+package main
+
+import "fmt"
+
+func main() {
+ var roomNumber, floorNumber int
+ fmt.Println(roomNumber, floorNumber)
+
+ var password string
+ fmt.Println(password)
+}
+```
+
+该程序输出:
+
+```go
+0 0
+
+```
+
+string 类型的变量 **password** 由 string 类型的零值初始化,该值为空字符串 ""。变量 roomNumber 和 floorNumber 被初始化为 int 类型的零值,即0。
+
+程序输出的第一行是 `fmt.Println(password)` 的结果。第二行是 `fmt.Println(roomNumber, floorNumber)` 的结果。
+
+### 7.3 有初始化的变量声明
+
+![Variable declation with initialization syntax[fig:Variable-declation-with-initializer]](imgs/variable_decl_with_initialization.31e0cb43.png)
+
+带有初始化语法的变量声明[fig:Variable-declation-with-initializer]
+
+你还可以声明一个变量并直接初始化其值。图 [3](#fig:Variable-declation-with-initializer) 描述了可能的语法。让我们举个例子:
+
+```go
+// variables-constants-and-basic-types/declaration-variant/main.go
+package main
+
+import "fmt"
+
+func main() {
+ var roomNumber, floorNumber int = 154, 3
+ fmt.Println(roomNumber, floorNumber)
+
+ var password = "notSecured"
+ fmt.Println(password)
+}
+```
+
+在 `main` 函数中,第一条语句声明了两个 `int` 类型变量 roomNumber 和 floorNumber 并用 154 和 3 初始化,然后打印这些变量。
+
+等号左边有一个表达式或表达式列表。我们将在另一章详细介绍表达式。
+
+然后定义变量 `password` 并用 `"notSecured"` 初始化。请注意,这里没有写入类型,Go 将为变量提供初始化值的类型。这里 `"notSecured"` 的类型是一个字符串;因此,变量 `password` 的类型是字符串。
+
+### 7.4 短变量声明
+
+![Short variable declaration[fig:Short-variable-declaration]](imgs/short_variable_declaration.ada142f1.png)
+
+短变量声明[fig:Short-variable-declaration]
+
+短变量声明语法去除了 **var** 关键字, `=` 符号转换为 `:=`,使用此语法同样可以一次定义多个变量。
+
+```go
+roomNumber := 154
+```
+
+类型没有明确写入。编译器将从表达式(或表达式列表)中推断出变量的类型。
+
+这是一个例子:
+
+```go
+// variables-constants-and-basic-types/short-declaration/main.go
+package main
+
+import "fmt"
+
+func main() {
+ roomNumber, floorNumber := 154, 3
+ fmt.Println(roomNumber, floorNumber)
+}
+```
+
+- 警告:不能在函数外使用短变量声明!
+
+```go
+// will not compile
+package main
+
+vatRat := 20
+
+func main(){
+
+}
+```
+
+- 警告:不能将 `nil` 用于短变量声明,因为这样编译器将无法推断变量的类型。
+
+> 本书的纸质版和数字版均可用![更多信息在这里](https://www.practical-go-lessons.com/buy-digital-or-hard-copy)。
+
+## 8 什么是常量?
+
+Constant 来自拉丁语 「**constare**」,意思是「站立不动」。常量是程序中一个稳定的值,在执行过程中不会改变。变量可以在运行时改变,常数则不会,它将保持不变。
+
+例如,我们可以在一个常量中存储:
+
+- 程序的版本,例如:「1.3.2」,该值将在程序运行时保持稳定。我们会在编译另一个版本的程序时更改此值。
+- 程序的构建时间。
+- 电子邮件模板(如果我们的应用程序无法配置)。
+- 一条错误信息。
+
+总之,当你确定一个值在程序执行期间永远不需要更改时,请使用常量。我们说常量是 **不可变的**。常量有两种形式:有类型和无类型。
+
+## 9 类型常量
+
+这是一个类型化的常量:
+
+```go
+const version string = "1.3.2"
+```
+
+关键字 const 向编译器表明我们将定义一个 **常量**。在 const 关键字之后,设置了常量的标识符。在这个示例中,标识符是 "version"。类型是明确定义的(**string**),常量的值也是明确定义的(以表达式的形式)。
+
+![Typed constant declaration](imgs/constant_declaration.5011f7f9.png)
+
+类型常量声明
+
+## 10 无类型常量
+
+这是一个无类型化的常量:
+
+```go
+const version = "1.3.2"
+```
+
+无类型化常量:
+
+- 没有类型
+- 有默认类型
+- 没有限制
+
+### 10.1 无类型常量没有类型
+
+举个例子:
+
+```go
+// variables-constants-and-basic-types/untyped-const/main.go
+package main
+
+import "fmt"
+
+func main() {
+ const occupancyLimit = 12
+
+ var occupancyLimit1 uint8
+ var occupancyLimit2 int64
+ var occupancyLimit3 float32
+
+ // 将无类型常量分配给 uint8 变量
+ occupancyLimit1 = occupancyLimit
+ // 将无类型常量分配给 int64 变量
+ occupancyLimit2 = occupancyLimit
+ // 将无类型常量分配给 float32 变量
+ occupancyLimit3 = occupancyLimit
+
+ fmt.Println(occupancyLimit1, occupancyLimit2, occupancyLimit3)
+}
+```
+
+在这个程序中,我们首先定义一个值为 12 的无类型常量 `occupancyLimit`。这个常量没有特定的类型,但它被设置为整数值。
+
+然后我们定义了 3 个变量:`occupancyLimit1`、`occupancyLimit2`、`occupancyLimit2`(这些变量的类型是 uint8、int64、float32)。
+
+之后我们将 `occupancyLimit` 的值分配给这些变量。也就是说,常量的值可以放入不同类型的变量中!
+
+### 10.2 无类型常量的默认类型
+
+为了理解默认类型的概念,让我们举另一个例子:
+
+```go
+// variables-constants-and-basic-types/default-type/main.go
+package main
+
+import "fmt"
+
+func main() {
+ const occupancyLimit = 12
+
+ var occupancyLimit4 string
+
+ occupancyLimit4 = occupancyLimit
+
+ fmt.Println(occupancyLimit4)
+}
+```
+
+在这个程序中,我们定义了一个常量 `occupancyLimit`,它的值为 12(一个整数)。我们定义了一个字符串类型的变量 `occupancyLimit4`,然后我们尝试将常量的值分配给 `occupancyLimit4`。
+
+我们尝试把一个整数转换成一个字符串。这个程序能编译吗?答案是否定的!编译错误为:
+
+```go
+./main.go:10:19: cannot use occupancyLimit (type int) as type string in assignment
+```
+
+无类型常量具有默认类型,该类型由分配给它的值在编译时定义。在我们的示例中,`occupancyLimit` 的默认类型为 `int`。不能将 `int` 分配给 `string` 变量。
+
+无类型常量默认类型是:
+
+- bool(对于任何布尔值)
+- rune(对于任何 rune 值)
+- int(对于任何整数值)
+- float64(对于任何浮点数值)
+- complex128(对于任何复数值)
+- string(对于任何字符串值)
+
+```go
+// variables-constants-and-basic-types/untyped-default/main.go
+package main
+
+func main() {
+
+ // 默认类型是 bool
+ const isOpen = true
+ // 默认类型是 rune (int32 的别名)
+ const MyRune = 'r'
+ // 默认类型是 int
+ const occupancyLimit = 12
+ // 默认类型是 float64
+ const vatRate = 29.87
+ // 默认类型是 complex128
+ const complexNumber = 1 + 2i
+ // 默认类型是 string
+ const hotelName = "Gopher Hotel"
+
+}
+```
+
+### 10.3 无类型常量没有限制
+
+无类型常量没有类型,需要时有默认类型。无类型常量的值可能会溢出其默认类型。这样的常量没有类型;因此,它不依赖于任何类型限制。举个例子:
+
+```go
+// variables-constants-and-basic-types/untyped-no-limit/main.go
+package main
+
+func main() {
+ // int 的最大值是 9223372036854775807
+ // 9223372036854775808 (max + 1 ) 溢出了 int 的最大值
+ const profit = 9223372036854775808
+ // 程序编译
+}
+```
+
+在这个程序中,我们创建了一个名为 `profit` 的无类型常量,它的值是 922,3372,0368,5477,5808,溢出了 int 允许的最大值(在我的 64 位机器上为 int64):922,3372,0368,5477,5807。然后这个程序能够完美地编译。但是当我们尝试将此常量值分配给类型化变量时,程序将无法编译。举个例子来证明它:
+
+```go
+// variables-constants-and-basic-types/untyped-no-limit-2/main.go
+package main
+
+import "fmt"
+
+func main() {
+ // int 的最大值是 9223372036854775807
+ // 9223372036854775808 (max + 1 ) 溢出了 int 的最大值
+ const profit = 9223372036854775808
+ var profit2 int64 = profit
+ fmt.Println(profit2)
+}
+```
+
+该程序定义了一个 `int64` 类型的变量 `profit2`,然后我们尝试将无类型常量 `profit` 的值分配给 `profit2`。
+
+让我们尝试编译程序:
+
+```go
+$ go build main.go
+# command-line-arguments
+./main.go:9:7: constant 9223372036854775808 overflows int64
+```
+
+得到一个编译错误,这说明我们试图做的事情是非法的。
+
+### 10.4 为什么要使用常量?
+
+- 提高程序的可读性
+ - 如果选择得当,常量标识符将为读者提供比原始值更多的信息
+
+比较以下两段程序:
+
+```go
+loc, err := time.LoadLocation(UKTimezoneName)
+if err != nil {
+ return nil, err
+}
+```
+
+```go
+loc, err := time.LoadLocation("Europe/London")
+if err != nil {
+ return nil, err
+}
+```
+
+我们使用常量 `UKTimezoneName ` 而不是原始值 `"Europe/London"` 。我们向读者隐藏了时区字符串的复杂性。除此之外,读者会明白我们的意图是什么——我们要加载英国的时区。
+
+- 你允许潜在的重用值(由另一个程序或在您自己的程序中)。
+- 编译器可能会改进生成的机器代码。你对编译器说这个值永远不会改变;如果编译器很聪明(而且确实如此),它就会巧妙地使用它。
+
+## 11 选择标识符(变量名、常量名)
+
+命名变量和常量不是一件容易的事。选择名称时,必须确保所选名称提供了有关其名称的适当信息量。如果你选择了一个好的标识符名称,从事同一项目的其他开发人员将非常感激,因为阅读代码将更容易。当我们说「传达适当数量的信息」时,「正确」一词是含糊不清的。命名程序构造没有科学的规则,但即使如此,我也可以给你一些我们社区共享的建议。
+
+1. 避免使用一个字母命名:它传达的有关存储内容的信息太少。
+ 1. 例外情况是计数器通常被命名为 `k`、`i` 和 `j`(在循环内部,我们将在后面介绍)
+2. 使用小驼峰命名法:这是 Go 社区中一个完善的约定。
+ 1. `occupancyLimit` 比 `occupancy_limit`[3](#fn3) 或者 `occupancy-limit`[4](#fn4) 更好
+3. 不超过两个单词
+ 1. 比起 `profitValue` , `profitValueBeforeTaxMinusOperationalCosts` 就太长了
+4. 避免在名称中提及类型
+ 1. `descriptionString` 错误, `description` 正确
+ 2. Go 已经是静态类型的;您不需要向读者提供类型信息。(在一些松散类型的语言中,有时需要避免混淆)
+
+> 本书的纸质版和数字版均可用![更多信息在这里](https://www.practical-go-lessons.com/buy-digital-or-hard-copy)。
+
+## 12 实践应用
+
+### 12.1 任务
+
+#### 12.1.1 编程
+
+编写一个满足以下要求的程序:
+
+- 创建一个名为 `hotelName` 且值为 `"Gopher Hotel"` 的字符串常量
+- 创建两个分别包含 24.806078 和 -78.243027 的无类型常量,这两个常量的名称是 `longitude` 和 `latitude`。(巴哈马的某个地方)
+- 创建一个名为 `occupancy` 的 `int` 类型变量,其初始化值为 12。
+- 在新的一行中打印 `hotelName`、`longitude`、`latitude` 和 `occupancy` 。
+
+#### 12.1.2 奖励问题
+
+1. `longitude` 和 `latitude` 的默认类型是什么?
+2. `longitude` 的类型是什么?
+3. 变量 `occupancy` 是 `int` 类型。它是 64、32 还是 8 位整数?
+
+### 12.2 参考答案
+
+#### 12.2.1 示例程序
+
+```go
+// variables-constants-and-basic-types/mission-solution/main.go
+package main
+
+import "fmt"
+
+func main() {
+ const hotelName string = "Gopher Hotel"
+ const longitude = 24.806078
+ const latitude = -78.243027
+ var occupancy int = 12
+ fmt.Println(hotelName, longitude, latitude)
+ fmt.Println(occupancy)
+}
+```
+
+我们从字符串常量 `hotelName` 与无类型常量 `longitude` 和 `latitude` 的定义开始,然后我们定义 `int` 型变量 `occupancy` 并将其值设置为 12。请注意,另一种语法是可能的:
+
+- 短变量声明
+
+```go
+occupancy := 12
+```
+
+- 标准声明中可以省略类型
+
+```go
+var occupancy = 12
+```
+
+- 我们可以分两步进行变量的声明和赋值
+
+```go
+var occupancy int
+occupancy = 12
+```
+
+### 12.2.2 奖励问题答案
+
+1. `longitude` 和 `latitude` 的默认类型是什么?
+ 1. float64
+2. `longitude` 的类型是什么?
+ 1. 无类型,`latitude` 也一样。
+3. 变量 `occupancy` 是 `int` 类型。它是 64、32 还是 8 位整数?
+ 1. `int` 是一种在不同位数计算机上具有特定于实现的大小的类型。在 32 位计算机上,它将是一个 32 位整数(int32);在 64 位计算机上,它将是一个 64 位整数(int64)
+
+## 13 自测
+
+### 13.1 问题
+
+1. 什么是标识符?
+2. 标识符应该以哪些类型的字符开头?
+3. 变量的类型是什么?
+4. 什么是字节?
+5. 当你声明一个类型 bool 变量时,它的值是什么(在初始化之后)?
+6. 无类型常量的两个主要特征是什么?
+
+### 13.2 答案
+
+1. 什么是标识符?
+ 1. 标识符是由字母和数字组成的一组字符。
+2. 标识符应该以哪些类型的字符开头?
+ 1. 一个字母或一个下划线。
+3. 变量的类型是什么?
+ 1. 变量的类型是一组允许的变量值。
+4. 什么是字节?
+ 1. 一个字节由8位二进制数字组成。
+5. 当你声明一个类型 bool 变量时,它的值是什么(在初始化之后)?
+ 1. false。当声明一个变量时,它被初始化为其类型的默认值。
+6. 无类型常量的两个主要特征是什么?
+ 1. 没有类型
+ 2. 有默认类型
+ 3. 没有限制
+
+## 14 关键要点
+
+- 变量或常量的名称称为标识符
+- 标识符一般使用小驼峰命名法
+- 变量和常量允许你再内存中保存一个值
+- 常量是不可变的,这意味着我们不能在程序执行期间更改它们的值
+- 变量有一个类型,它定义了它们可以保存的值的集合
+- 创建一个变量时,它的值被初始化为其类型的零值
+ - 这个超级重要!
+ - 它可能是错误的来源。
+ - Go 中没有未初始化的变量。
+- 常量有两类:
+ - 有类型的
+ - 无类型的
+ - 除了默认类型之外没有任何类型,并且可以溢出其默认类型。
+
+---
+
+1. 在 Go 规范中,Unicode 字母是 Unicode 规范 8.0 中 Lu、Ll、Lt、Lm 或 Lo 列表中的任何字符[↩︎](#fnref1)
+2. 在 Go 规范中,Unicode 数字是来自 Unicode 规范 8.0 的 Nd 列表中的任何字符[↩︎](#fnref2)
+3. Snake case[↩︎](#fnref3)
+4. Kebab case[↩︎](#fnref4)
diff --git a/chap-8-variables-constants-and-basic-types/imgs/constant_declaration.5011f7f9.png b/chap-8-variables-constants-and-basic-types/imgs/constant_declaration.5011f7f9.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d866c05f1bb59f273ab9208170c0f2b3f59b822
Binary files /dev/null and b/chap-8-variables-constants-and-basic-types/imgs/constant_declaration.5011f7f9.png differ
diff --git a/chap-8-variables-constants-and-basic-types/imgs/short_variable_declaration.ada142f1.png b/chap-8-variables-constants-and-basic-types/imgs/short_variable_declaration.ada142f1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da9f569e673048a1533d135539b31c9f0f09858
Binary files /dev/null and b/chap-8-variables-constants-and-basic-types/imgs/short_variable_declaration.ada142f1.png differ
diff --git a/chap-8-variables-constants-and-basic-types/imgs/variable_decl_with_initialization.31e0cb43.png b/chap-8-variables-constants-and-basic-types/imgs/variable_decl_with_initialization.31e0cb43.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc93547bcd5d4f162a119dd304410371a6ba4cdd
Binary files /dev/null and b/chap-8-variables-constants-and-basic-types/imgs/variable_decl_with_initialization.31e0cb43.png differ
diff --git a/chap-8-variables-constants-and-basic-types/imgs/variable_initialization.a908a70e.png b/chap-8-variables-constants-and-basic-types/imgs/variable_initialization.a908a70e.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a35247a3f214fffc6087f14d07c982b189123de
Binary files /dev/null and b/chap-8-variables-constants-and-basic-types/imgs/variable_initialization.a908a70e.png differ
diff --git a/chap-8-variables-constants-and-basic-types/imgs/variables-consts.1cf1af40.jpg b/chap-8-variables-constants-and-basic-types/imgs/variables-consts.1cf1af40.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5e756be183eafe519d8caa03345fd7a481cf85af
Binary files /dev/null and b/chap-8-variables-constants-and-basic-types/imgs/variables-consts.1cf1af40.jpg differ
diff --git a/chap-8-variables-constants-and-basic-types/imgs/what_is_a_variable.87f49327.png b/chap-8-variables-constants-and-basic-types/imgs/what_is_a_variable.87f49327.png
new file mode 100644
index 0000000000000000000000000000000000000000..50735a9067466c5ce0ea5f650f8d3fda6473a39b
Binary files /dev/null and b/chap-8-variables-constants-and-basic-types/imgs/what_is_a_variable.87f49327.png differ