Go入门
1.基础语法
1.1 hello world
- 第一行代码 package main 定义了包名。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
- 下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
- 下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数。
1.2 变量
变量声明
第一种,指定变量类型,声明后若不赋值,使用默认值。
var v_name v_type
v_name = value
第二种,根据值自行判定变量类型。
var v_name = value
第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。
v_name := value
// 例如
var a int = 10
var b = 10
c := 10
多变量声明
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 = v1, v2, v3
vname1, vname2, vname3 := v1, v2, v3
var (
vname1 v_type1
vname2 v_type2
)
1.3基本数据类型
- 布尔型:布尔型的值只可以是常量 true 或者 false。
- 数字类型:整型 int 和浮点型 float,Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。
- 字符串类型:字符串就是一串固定长度的字符连接起来的字符序列。
- 派生类型: (a) 指针类型(Pointer) (b) 数组类型 (c) 结构体类型(struct) (d) 联合体类型 (union) (e) 函数类型 (f) 切片类型 (g) 接口类型(interface) (h) Map 类型 (i) Channel 类型
1.4 if-else

if 语句:if 语句 由一个布尔表达式后紧跟一个或多个语句组成。
if...else 语句:if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。
if 嵌套语句:可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。
1.5 循环语句

- for 循环:重复执行语句块
- 循环嵌套:在 for 循环中嵌套一个或多个 for 循环
- reak语句:经常用于中断当前 for 循环或跳出 switch 语句
- continue 语句:跳过当前循环的剩余语句,然后继续进行下一轮循环。
- goto语句:将控制转移到被标记的语句
1.6 switch

switch 语句:switch 语句用于基于不同条件执行不同动作。
select 语句:select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。
1.7数组
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。
数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1.....

初始化数组中 {} 中的元素个数不能大于 [] 中的数字。 如果忽略 [] 中的数字不设置数组大小,则Go 语言会根据元素的个数来自动设置数组的大小。 数组元素可以通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值。
1.8切片

Go 语言切片是对数组的抽象。 与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
1.9 map

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。
1.10 函数
- 函数是基本的代码块,用于执行一个任务。
- Go 语言最少有1个 main() 函数。
- 函数声明告诉了编译器函数的名称,返回类型和参数。
- Go 语言标准库提供了多种可动用的内置的函数。

- func:函数由 func 开始声明;
- function_name:函数名称;
- parameter list:参数列表;
- return_types:返回类型,函数返回一列值,return_types 不是必须的。
- 函数体:函数定义的代码集合。
1.11指针
一个指针变量可以指向任何一个值的内存地址它指向那个值的内存地址。
类似于变量和常量,在使用指针前你需要声明指针。
1.12 结构体

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。 结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。
1.13 错误处理
Go 语言通过内置的错误接口提供了非常简单的错误处理机制。 error类型是一个接口类型,这是它的定义:
type error interface {
Error() string
}
我们可以在编码中通过实现 error 接口类型来生成错误信息。 函数通常在最后的返回值中返回错误信息。
小结
与其他编程语言相比,Go语言的基础语法简洁明了,新手上手较快,但在某些地方仍需要一些基础才能较好的理解。
总之Go语言的语法简洁易读,且拥有强大的标准库,可以快速构建高效、安全的应用程序。