Go语言基础 | 青训营笔记

90 阅读3分钟

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

写在开头

本人是一个第一次参加字节青训营的学生,主要是简单记录一下自己学习的过程以及复习(详细的需要自己去看每天对应的课程),每天会发前一天课程的笔记以及自己的思考(对项目)

Go语言?

第一天的课程比较简单,讲解了一下为什么拥抱Go语言,它的优点在哪里,以及Go语言的基础语法,还顺带讲了三个小项目。

Go的优点

  1. 高性能,高并发
  2. 语法简单,学习曲线平缓(确实很简单)
  3. 丰富的标准库
  4. 完善的工具链
  5. 快速编译
  6. 跨平台
  7. 垃圾回收

Go语言在多核并发上拥有原生的设计优势,Go语言从底层原生支持并发,经过 Go 语言重构的系统能使用更少的硬件资源获得更高的并发和I/O吞吐表现,充分挖掘硬件设备的潜力也满足当前精细化运营的市场大环境。

现在很多互联网大厂都开始拥抱Go语言了,字节,腾讯,美团,滴滴等等

Go的基础语法

基础的环境配置这里就不赘述了,如果想要在Go里实现Hello,world需要用到一个叫做fmt的标准库,这个包主要就是往屏幕输出字符串,格式化字符串等。

package是属于哪个包,import是导入了哪个包

package main

import (
   "fmt"
)

func main() {
    fmt.Println("Hello, world")
}

变量

定义变量有多个方法,可以定义局部变量,也可以全局,也可以常量,不过Go语言的变量数据类型是在变量名后面的,值也是,Go的常量则是没有固定的数据类型,根据上下文去判断,全局变量也可以。

局部变量定义是:=,全局变量是var,常量是const。

package main

import (
   "fmt"
)

const s string = "Hello, world"

func main() {
    var a = "PaoPao"
    
    b := 1
    
    var c int = 20
    
    fmt.Println(s)
}

判断

和C语言的基本一样,就是不用写括号了

if xxx {
} else {
}

循环

Go没有while和do while,只有for,for也不用写括号,如果要死循环啥条件也不加就可以了

for {
    // 死循环
}

n := 10
for i := 1; i <= n; i ++ {
    // 逻辑
}

switch

同样不用加括号,并且switch里面的case不用break,c++如果不写break会把case全部执行完,Go不会,你可以switch不加任何变量,直接用case取代if else,在case里面进行判断(可以用任何类型的变量)

数组

和c差不多,定义方法不一样,我们用切片比数组多

var a [5]int
b := [2]int{1, 2}

切片

类似于vector,可以任意更改长度,底层是数组,可以用make去创建切片,像数组一样取值,append追加值。并且他会自动扩容。也可以进行切片操作

s := make([]string, 3)
s[0] = "a"

s = append(s, "b") // 第一个参数必须是slice的名字

c := []string{"a", "b"} // 这样也是一个slice

map

和传统的差不多,一个索引一个值

m := map[string]string

range

和c++的auto差不多,可以用来遍历map和slice

m := map[string]int{"a":1}
for k, v := range m {
    fmt.Println(k, v) // a 1
}

函数

返回类型在最后面,也可以有多个返回值类型(一般第一个是结果,第二个是错误)

func add(a int, b int) int {
    return a + b
}

func add2(a string, b string) (v string, ok bool) {
    return v, ok
}

指针

比c的指针弱一些,操作有限,*是指针,&是取地址,不管是结构体,函数,变量啥的都有指针类型

结构体

和c的差不多,语法不同,可以嵌套

type user struct {
    name string
    pass string 
}

总结

三个小项目很不错