Go语言基础入门(上) | 青训营笔记

105 阅读4分钟

Go语言基础入门(上) | 青训营笔记

[第六届青训营] 笔记创作的第一篇

本堂课的内容

分为3个部分:

  • 第一个部分介绍了Go语言基本特点
  • 第二个部分介绍了Go语言的基本语法
  • 第三个部分是使用了3个demo示例带着大家熟悉Go语言

接下来就大致按照这些点介绍一下Go语言基础

Go语言基本特点

  • 语法简洁,易于上手:不像C/C++动辄需要2—3年的学习期,Go语言的风格类似于C语言。其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括号,循环也只有 for 一种表示方法,就可以实现数值、键值等各种遍历。

  • 代码风格统一:Go 语言提供了 go fmt 这样一套格式化工具。一些 Go 语言的开发环境或者编辑器在保存时,都会使用格式化工具进行修改代码的格式化,这样就保证了不同开发者提交的代码都是统一的格式。

  • 高性能高并发:Go语言具有轻量级的线程(Goroutine)和高效的信道(Channel)等特点,可以很好地支持高并发计算。

  • 跨平台

  • 自动gc

Go语言基本语法

Go语言基本数据类型

  • 整数
  • 浮点数
  • 布尔类型
  • 跨平台
  • 自动gc

变量

在Go语言中,变量是强类型而非弱类型的,故在声明变量的时候必须指明变量的类型,并且在函数调用等情况下, 编译器会检查其类型的正确性。

Go语言变量声明时,使用var声明语句,且变量类型一般放在变量名后面。当然var也可以一次声明多个对象,并且Go会自动推断已经有初始值的变量的类型。:= 语法是声明并初始化变量的简写, 例如 var f string = "short" 可以简写为右边这样。

var b, c int = 1, 2
f := "short"

流程控制

for 是 Go 中唯一的循环结构,有最基础的单个循环条件方式,也有经典的初始/条件/后续 for 循环。不带条件的 for 循环将一直重复执行, 直到在循环体内使用了 break 或者 return 跳出循环。

也可以使用 continue 直接进入下一次循环。

    i := 1
    for i <= 3 {
        fmt.Println(i)
        i = i + 1
    }

    for j := 7; j <= 9; j++ {
        fmt.Println(j)
    }

    for {
        fmt.Println("loop")
        break
    }

    for n := 0; n <= 5; n++ {
        if n%2 == 0 {
            continue
        }
        fmt.Println(n)
    }

数组

在 Go 中,数组 是一个具有编号且长度固定的元素序列。可以使用 array[index] = value 语法来设置数组指定位置的值, 或者用 array[index] 得到值。内置函数 len 可以返回数组的长度。

也可以使用 continue 直接进入下一次循环。

    var a [5]int
    a[4] = 100

    fmt.Println("len:", len(a))

    b := [5]int{1, 2, 3, 4, 5}

切片

Slice 是 Go 中一个重要的数据类型,它提供了比数组更强大的序列交互方式。要创建一个长度不为 0 的空 slice,需要使用内建函数 make。

特点:

  • 切片长度是可变的,超出容量后会自动扩容,类似于Java中ArrayList
  • 切片支持切片操作,比如切片名[1:3]会获取切片中下标1-2的元素(左闭右开)
  • 通过copy函数,可以实现切片快速拷贝
s := make([]string, 3)

var a = make([]int, 3)
a[0] = 0
a[1] = 1
a[2] = 2

// 切片
fmt.Print(a[:2])  // 0 1

// 拷贝
var b = make([]int, len(a))
copy(b,a)

// 追加 
a = append(a, 3, 4, 5)

Map

map 是 Go 内建的关联数据类型 (在一些其他的语言中也被称为 哈希(hash) 或者 字典(dict))。与slice一样,如要创建一个空 map,需要使用内建函数 make:make(map[key-type]val-type)。

使用典型的 name[key] = val 语法来设置键值对。内建函数 len 可以返回一个 map 的键值对数量,内建函数 delete 可以从一个 map 中移除键值对。

当从一个 map 中取值时,还可以选择是否接收的第二个返回值,第一个值就是键值对键所对应的value,第二个值表明了 map 中是否存在这个键。如这里我们不需要值,所以用 空白标识符(blank identifier) _ 将其忽略。

    m := make(map[string]int)

    m["k1"] = 7
    m["k2"] = 13

    v1 := m["k1"]

    delete(m, "k2")

    _, prs := m["k2"]