Go基础语法
Go特点
- 高性能, 高并发
- 丰富的标准库
- 完善的工具链
- 静态编译
- 快速编译
- 跨平台
- 垃圾回收
变量
与js类似,通过var,const声明
声明变量方式
var 变量名 = 值自动推导变量类型
var 变量名 变量类型 = 值规定类型
变量名 := 值
常量
将var改成const
常量没有确定的类型, 会根据使用的上下文自动确定类型
if else
与其他语言类似
for
// 死循环
for {
fmt.Println("123")
}
// 经典循环
for j := 7; j < 9; j++ {
fmt.Println(j)
}
continue, break 与c一样 for后不加条件是指死循环
switch case
不需要加break, 不会继续往下执行
// 不加变量直接写结构分支
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
数组
定义方式
var a [5]intb := [5]int{1, 2, 3, 4, 5}var twoD [2][3]int
切片
切片不同于数组, 是一个可变长度的数组 用make创建切片
func main() {
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
s = append(s, "d")
// 第[l~r)个元素
fmt.Println(s[2:5]) // [c d e]
}
map
类似于java的hashmap
-
创建和初始化 map
m := make(map[string]int):创建一个空的 map,键为字符串类型,值为整数类型。m["one"] = 1和m["two"] = 2:向 map 中添加键值对。
-
打印 map
fmt.Println(m):输出整个 map 的内容,结果为map[one:1 two:2]。
-
获取 map 的长度
fmt.Println(len(m)):输出 map 的长度,结果为2。
-
获取指定键的值
fmt.Println(m["one"]):获取键为"one"的值,结果为1。fmt.Println(m["unknow"]):尝试获取不存在的键"unknow"的值,结果为0(默认值)。
-
检查键是否存在
r, ok := m["unknow"]:使用多重赋值检查键是否存在。r是键对应的值,ok是一个布尔值,表示键是否存在。fmt.Println(r, ok):输出0 false,表示键"unknow"不存在。
-
删除指定键的值
delete(m, "one"):从 map 中删除键为"one"的条目。
-
使用字面量创建 map
m2 := map[string]int{"one": 1, "two": 2}:使用字面量创建并初始化 map。var m3 = map[string]int{"one": 1, "two": 2}:使用var关键字和字面量创建并初始化 map。fmt.Println(m2, m3):输出两个 map 的内容,结果为map[one:1 two:2] map[one:1 two:2]。
range
-
定义和遍历切片
nums := []int{2, 3, 4}:定义一个包含三个整数的切片。sum := 0:初始化一个变量sum用于存储切片元素的总和。for i, num := range nums:使用range关键字遍历切片,i是索引,num是当前元素的值。sum += num:将当前元素的值累加到sum中。if num == 2:如果当前元素的值为2,则打印其索引和值。
fmt.Println(sum):输出切片元素的总和,结果为9。
-
定义和遍历 Map
m := map[string]string{"a": "A", "b": "B"}:定义一个字符串到字符串的 map。for k, v := range m:使用range关键字遍历 map,k是键,v是值。fmt.Println(k, v):打印每个键值对,输出顺序可能不固定,例如b B; a A。
for k := range m:使用range关键字遍历 map,只获取键。fmt.Println("key", k):打印每个键,输出顺序可能不固定,例如key a; key b。
注意事项
range关键字在遍历切片时返回索引和值,在遍历 map 时返回键和值。- 遍历 map 的顺序是不确定的,每次运行程序时输出的顺序可能会不同。