这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
写在开头
本人是一个第一次参加字节青训营的学生,主要是简单记录一下自己学习的过程以及复习(详细的需要自己去看每天对应的课程),每天会发前一天课程的笔记以及自己的思考(对项目)
Go语言?
第一天的课程比较简单,讲解了一下为什么拥抱Go语言,它的优点在哪里,以及Go语言的基础语法,还顺带讲了三个小项目。
Go的优点
- 高性能,高并发
- 语法简单,学习曲线平缓(确实很简单)
- 丰富的标准库
- 完善的工具链
- 快速编译
- 跨平台
- 垃圾回收
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
}
总结
三个小项目很不错