原站地址:Go 语言教程 | 菜鸟教程
本文目的: 精简方式记录最重要的知识点,方便快速复习
一、基本语法
-
GO语言特点:高效,并行,开源,搭载Web服务器
-
执行命令: go run hello.go
-
编译命令: go build hello.go
-
包声明: package main
-
引入包: import "fmt"
-
每行不需要分号结束;但一行多个语句的话,需要分号。
-
声明变量方式一:用关键字 var,名字在前,类型在后。var b, c int = 1, 2
-
声明变量方式二:a := 1, 相当于var a int = 1
-
变量没有初始化,默认值分别是:0,false,"",nil (指针、切片,map)
-
局部变量声明后不使用,会报错。但全局变量可以声明后不使用。
-
交换两个变量的值:a, b = b, a
-
并行复制可以用于函数返回,比如:val, err = Func1(var1)。
-
可以通过 &i 来获取变量 i 的内存地址
-
数据类型:
(1) 常规类型:bool,int,float32,,float64,string
(2) 派生类型:指针,数组,struct,Channel,函数,切片,接口,Map
(3) 其他类型:字节(byte),字符(rune), 无符号整型(uintptr)用于存放一个指针
-
定义常量:const LENGTH int = 10
-
定义枚举:(也是用的常量const关键字)
Go
const (
Female = 1
Male = 2
)
- 特殊常量 itoa,在 const关键字出现时初始值是 0, 每新增一行常量声明将使 iota 计数一次. 且不受直接赋值操作的影响。
Go
const (
a = iota //0
b //1
f = 100 //iota +=1
i //3
)
- 枚举的每一行的运算规则,跟随上一行。比如下图, g跟随f,继续是100
Go
const (
a = iota //0
b //1
f = 100
g //100
h = iota //4,恢复计数
i //5
)
-
常量可以用len(), cap() 等 内置函数 计算表达式的值,但必须是内置函数。
-
特殊运算符: <<左移, >>右移,^异或,&返回指针地址,*声明是指针
二、条件、循环语句
-
包含: if, else if, else, switch case, select case
-
switch case :
Go
switch var1 {
case a:
...
case b:
...
default:
...
}
(1) a 和 b 必须是相同数据类型, 但不被局限于常量或整数,可以是表达式。
(2) 从上至下逐一测试,直到匹配为止
(3) case 最后自带 break 语句,如果需要执行后面的 case,可以使用 fallthrough
- select case:
Go
select {
case <- channel1:
// 执行的代码
case value := <- channel2:
// 执行的代码
case channel3 <- value:
// 执行的代码
default:
// 所有通道都没有准备好,执行的代码
}
(1) 只能用于通道操作,要么是发送要么是接收
(2) 会监听所有通道,其中一个准备好就会执行相应的代码块。
(3) 多个通道都准备好,会随机选择一个通道执行。
(4) 所有通道都没有准备好,会执行 default 的代码。如果没有 default 子句,select 将阻塞,直到某个通道可以运行
- for 语句:有 4 种形式
(1) for init; condition; post { } 和 C 语言的 for 一样
(2) for condition { } 和 C 的 while 一样
(3) for { } 无限循环
(4) For-each range 循环:可以对字符串、数组、切片等迭代输出元素,获得索引和值
Go
strings := []string{"google", "runoob"}
for i, s := range strings {
fmt.Println(i, s)
}
如果是map的话,可以获得 key 和value
Go
ap1 := make(map[int]float32)
map1[1] = 1.0
map1[2] = 2.0
for key, value := range map1 {
fmt.Printf("key is: %d - value is: %f\n", key, value)
}