go 语言基础 | 青训营笔记

154 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

本文不是教程,是自己在训练营中所学的笔记

1.简介

  • Golang = C + GC + 协程 + 反射 + 接口
  • 自带完整的工具链,不需要 maven、juint
  • 支持的目标平台多,支持交叉编译

2. go速通

2.1 开发环境

  • 建议使用 Goland
  • 家里无矿订阅 Intellij 使用 VSCode

2.2 基础语法

Go 虽说是 C 家族语言,但是好多代码风格差异很大

Go 中大部分控制语句都取消括号包裹,执行的代码块必须使用大括号进行包裹

2.2.1 if

bool 表达式不需要括号包裹

2.2.2 循环

Go 语言中只有一个循环,那就是 for 循环

  • 正常 for 循环 for ;; {}
  • C 中的 while 循环 for 条件{}
  • 使用for{} 来作为死循环

2.2.3 switch

与 C switch相似,但是不使用 break,C家族中不使用break会导致运行下一个 case,在 go 中我们想要运行下一个 case 在当前case末尾添加语句fallthrough才会执行下一个case

可以使用任何类型,本质上是 if-else 语句的序列,即case可以不适用常量,

不使用 condition 表达式来美化一个 if-else 序列

func main(){
    t := time.Now()
    switch{
    case t.Hour() < 12:
        fmt.Println("good morning")
    case t.Hour() < 17:
        fmt.Println("good afternoon")
    drfault:
        fmt.Println("good evening")
    }
}

2.2.4 数组

就是数组,在现实开发中一般使用切片

2.2.5 切片

实际上更像是数组的引用,只是描述数组的一个部分。改变切片中的一个值,将会改变描述数组的数据,所以其他描述这个数组的切片也会发生改变

2.2.6 map

类似于 java 中的 map,键不可重复,当重复是,其值会被覆盖。

必须使用 make 函数进行创建

m := make[string]int
m["tom"] = 100

CRUD操作:

  • C/U:m[key] = elem
  • R:elem = m[key]
  • D:delete(m, key)

进行遍历 map 时顺序完全是随机的。

Go 中没有类似与 Java 中的 Set 集合,我们可以只使用map的键来完成类似 Java 中 Set 的使用。

2.2.7 range

相当于创建一个迭代器,可以针对切片和map进行遍历 基本语法:for i, v := range slice {} 。 i 代表索引,v代表值

2.2.8 nil

相当于 Java 中的 null

经典的 if err != nil