Go语法基础 | 豆包MarsCode AI 刷题

78 阅读3分钟

Go基础语法

Go特点

  1. 高性能, 高并发
  2. 丰富的标准库
  3. 完善的工具链
  4. 静态编译
  5. 快速编译
  6. 跨平台
  7. 垃圾回收

变量

与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")  
}

数组

定义方式

  1. var a [5]int
  2. b := [5]int{1, 2, 3, 4, 5}
  3. 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

  1. 创建和初始化 map

    • m := make(map[string]int):创建一个空的 map,键为字符串类型,值为整数类型。
    • m["one"] = 1m["two"] = 2:向 map 中添加键值对。
  2. 打印 map

    • fmt.Println(m):输出整个 map 的内容,结果为 map[one:1 two:2]
  3. 获取 map 的长度

    • fmt.Println(len(m)):输出 map 的长度,结果为 2
  4. 获取指定键的值

    • fmt.Println(m["one"]):获取键为 "one" 的值,结果为 1
    • fmt.Println(m["unknow"]):尝试获取不存在的键 "unknow" 的值,结果为 0(默认值)。
  5. 检查键是否存在

    • r, ok := m["unknow"]:使用多重赋值检查键是否存在。r 是键对应的值,ok 是一个布尔值,表示键是否存在。
    • fmt.Println(r, ok):输出 0 false,表示键 "unknow" 不存在。
  6. 删除指定键的值

    • delete(m, "one"):从 map 中删除键为 "one" 的条目。
  7. 使用字面量创建 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

  1. 定义和遍历切片

    • 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
  2. 定义和遍历 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 的顺序是不确定的,每次运行程序时输出的顺序可能会不同。