├── .gitignore ├── 1.基础语法 ├── 1.【第一轮考核】基础语法.md └── 案例 │ └── CocaineCong_第一轮 │ └── main.go ├── 2.网络爬虫 ├── 2.【第二轮考核】爬虫.md └── 案例 │ └── CocaineCong_第二轮 │ └── main.go ├── 3.备忘录 ├── 3.【第三轮考核】备忘录.md └── 案例 │ └── CocaineCong_第三轮 │ └── main.go ├── 4.大作品 ├── 4.【第四轮考核】大作品.md └── 案例 │ └── CocaineCong_第四轮 │ └── main.go ├── 5.即时通讯 ├── 5.【第五轮考核】即时通讯.md └── 案例 │ └── CocaineCong_第五轮 │ └── main.go ├── 6.微服务 ├── 6.【第六轮考核】微服务.md └── 案例 │ └── CocaineCong_第六轮 │ └── main.go ├── 7.底层实现 ├── 7.【第七轮考核】底层实现.md └── 案例 │ └── CocaineCong_第七轮 │ └── main.go ├── 8.合作 ├── 8.【第八轮考核】合作.md └── 案例 │ └── CocaineCong_第八轮 │ └── main.go ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, built with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | .idea 14 | # Dependency directories (remove the comment below to include it) 15 | # vendor/ 16 | -------------------------------------------------------------------------------- /1.基础语法/1.【第一轮考核】基础语法.md: -------------------------------------------------------------------------------- 1 | # Golang 第一轮考核 2 | 3 | ## 任务目的 4 | 5 | Go语言基本语法 6 | 7 | - 条件,选择 8 | - 循环 9 | - 键值对 10 | - 切片,集合 11 | - 函数 12 | - 通道 Channel 13 | - Go协程 Goroutine 14 | 15 | 16 | 17 | ## 基础作业(必做) 18 | 19 | 1. 输⼊⼀个年份(比如:2021),判断该年份是否为闰年,是则输出"yes",否则输出"no",⽂件保存命名为"1.go"。 20 | 2. 写⼀个判断素数的**函数**,然后输出1-100内的素数,⽂件保存命名为"2.go"。 21 | 3. 输⼊⼀个字符串,统计每个字符出现的次数并输出,⽂件保存命名为"3.go"。 22 | 4. 删除**切片(slice)** 中的一个元素,⽂件保存命名为"4.go"。 23 | 5. 创建**切片(slice)** 使其元素为数字1-50,从切⽚删掉为3的倍数的数,(3, 6, 9, ...)在末尾再增加⼀个数666,输出切⽚,⽂件保存命名为"5.go"。 24 | 25 | **输出示例:** 26 | 27 | ```go 28 | [1 2 4 5 7 8 10 11 13 14 16 17 19 20 22 23 25 26 28 29 31 32 34 35 37 38 40 41 43 44 46 47 49 50 666] 29 | ``` 30 | 31 | 32 | 33 | ## 提高作业 34 | 35 | 1. 写一个99乘法表,并且把结果保存到同⽬录下ninenine.txt,⽂件保存命名为"6.go"。 36 | 2. 运行下面代码,并写好理解注释,⽂件保存命名为"7.go" 37 | 38 | ```go 39 | package main 40 | 41 | import ( 42 | "fmt" 43 | ) 44 | 45 | func generate(ch chan int) { 46 | for i := 2; ; i++ { 47 | ch <- i 48 | } 49 | } 50 | 51 | func filter(in chan int, out chan int, prime int) { 52 | for { 53 | num := <-in 54 | if num%prime != 0 { 55 | out <- num 56 | } 57 | } 58 | } 59 | 60 | func main() { 61 | ch := make(chan int) 62 | go generate(ch) 63 | for i := 0; i < 6; i++ { 64 | prime := <-ch 65 | fmt.Printf("prime:%d\n", prime) 66 | out := make(chan int) 67 | go filter(ch, out, prime) 68 | ch = out 69 | } 70 | } 71 | ``` 72 | 73 | 74 | 75 | ## 作业要求 76 | 77 | 1. **不要抄袭 ** 78 | 2. **不要抄袭 ** 79 | 3. **不要抄袭 ** 80 | 4. 遇到不会的地⽅时,⾸先尝试⾃⼰去解决,可以去百度、⾕歌上寻求帮助,能⽤`搜索引擎`解决**⾃⼰**的问题是⼀项⾮常⾮常重要的能⼒。 81 | 82 | 83 | 84 | ## 教程 85 | 86 | - 菜鸟教程Go语言 https://www.runoob.com/go/go-tutorial.html 87 | - B站老男孩Go语言入门视频 https://www.bilibili.com/video/BV1fz4y1m7Pm?from=search&seid=6413126836468311663&spm_id_from=333.337.0.0 88 | - 七天入门Go语言 https://blog.csdn.net/weixin_45304503/category_11253946.html 89 | - go语言中文社区 https://learnku.com/go 90 | - CSDN https://blog.csdn.net/ 91 | 92 | 93 | -------------------------------------------------------------------------------- /1.基础语法/案例/CocaineCong_第一轮/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("HelloWorld") 7 | } 8 | -------------------------------------------------------------------------------- /2.网络爬虫/2.【第二轮考核】爬虫.md: -------------------------------------------------------------------------------- 1 | # Golang 第二轮考核 2 | 3 | ## 任务目的 4 | 5 | - 学习并使⽤go module进⾏第三⽅库的安装 6 | - 了解http协议和web的⼯作原理 7 | - 静态数据与动态数据的爬取 8 | - 学习使⽤关系型数据库,如:MySQL(20级) 9 | 10 | ## 基础任务 11 | 12 | **推荐库:** 13 | 14 | - **请求库:** 15 | - `net/http` 16 | - **解析库:** 17 | - `github.com/PuerkitoBio/goquery` 18 | - ``github.com/antchfx/htmlquery`` 19 | - `re` 20 | - **数据库驱动** 21 | - `github.com/go-sql-driver/mysql` 22 | 23 | 24 | 25 | 1. 爬取**福大要文**(http://news.fzu.edu.cn/html/fdyw/) 26 | 27 | **要求:** 28 | - 包含发布时间,作者,标题,阅读数以及正文。 29 | - 可自动翻页。 30 | - 范围:2020年1月1号 - 2021年9月1号(不要爬太多了)。 31 | 32 | 2. **下面两题任选一题:** 33 | 34 | - 爬取B站这个视频 https://www.bilibili.com/video/BV12341117rG 的**全部评论。**(有点难度) 35 | 36 | - 爬取CSDN这篇博客 https://blog.csdn.net/weixin_45304503/article/details/117730712 的**全部评论**。 37 | 38 | 39 | **要求:** 全部评论,包括子评论 40 | 41 | 将以上代码上传至`github`,如果来不及学习`git`,可以直接在网页端手动上传。但仅限本轮考核。 42 | 43 | ## 提高任务 44 | 45 | 1. 将上述爬取到的内容存入**数据库**中,`原生sql`或是`orm映射`都可以。 46 | 2. 第一题使用**并发**爬取。 47 | 48 | 49 | 50 | ## 学习资料 51 | 52 | - Go Module : https://www.bilibili.com/video/BV1w64y197wo?spm_id_from=333.999.0.0 53 | - 国内代理:https://goproxy.cn/ 54 | - B站黑马程序员**Go爬虫**:https://www.bilibili.com/video/BV1Nt411H7sP?p=1 55 | - Go爬虫知识总结:https://blog.csdn.net/weixin_45304503/article/details/120390989 56 | - Go爬虫基础系列文章: 57 | - https://cuiqingcai.com/5465.html 58 | - https://cuiqingcai.com/5476.html 59 | - https://cuiqingcai.com/5484.html 60 | - https://cuiqingcai.com/5487.html 61 | - https://cuiqingcai.com/5491.html 62 | - Go语⾔中⽂⽹:https://studygolang.com 63 | 64 | 65 | 66 | ## 注意 67 | 68 | - 本次考核难度较大,请**尽早开始学习** 69 | - 已经完成的同学可以先预习⼀下**gin**和**RESTful API**以及**数据库** 70 | - 不要抄袭 71 | -------------------------------------------------------------------------------- /2.网络爬虫/案例/CocaineCong_第二轮/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("HelloWorld") 7 | } 8 | -------------------------------------------------------------------------------- /3.备忘录/3.【第三轮考核】备忘录.md: -------------------------------------------------------------------------------- 1 | # Golang 第三轮考核 2 | 3 | ## 任务目的 4 | 5 | - 掌握http协议和Web工作原理 6 | - 掌握Go语言的Gin Web框架 7 | - 掌握使用关系型数据库,如:mysql 8 | - 学习**RESTful API**接口规范 9 | - 学习编写文档 10 | 11 | ## 考核任务 12 | FanOne准备放寒假了,但是他是一个**摸鱼怪**,请你写一个**备忘录**(写 API 接口即可),让FanOne记录下寒假要完成的事项,能在寒假完成弯道超车! 13 | (代码需提交到`Github`上去) 14 | 15 | ## 基础功能 16 | **编写以下API,并编写接口文档 (推荐使用postman)** 17 | 有能力同学可以尝试自动生成接口文档 18 | 19 | ### 用户模块 20 | 21 | - 实现基本的用户注册登录 ( 用token实现 ) 22 | 23 | **提醒一下:** FanOne创建的待办事务是不能让FanTwo看到的噢~ 24 | 25 | ### 事务模块 26 | 27 | 增: 28 | 29 | - 添加一条新的待办事项。 30 | 31 | 改: 32 | 33 | - 将 一条/所有 代办事项设置为已完成。 34 | - 将 一条/所有 已完成事项设置为待办。 35 | 36 | 查: 37 | 38 | - 查看所有 已完成/未完成/所有 事项。 (需要分页) 39 | - 输入**关键词**查询事项。(需要分页) 40 | 41 | 删: 42 | 43 | - 删除 一条/所有已经完成/所有待办/所有 事项。 44 | 45 | 46 | 47 | **一条事务至少需要一下几种属性:** 48 | 49 | - id 50 | - 标题 51 | - 内容 52 | - 完成状态 53 | - 添加时间 54 | - 截止时间 55 | 56 | 57 | 58 | ## 要求: 59 | 60 | 1. 接口满足**RESTful API**规范!!! 61 | 2. 接口文档可以不写**参数描述** 62 | 3. 数据返回建议使用JSON格式。如下例子所示: 63 | 64 | ```json 65 | { 66 | "status": 200, 67 | "data": { 68 | "item": [ 69 | { 70 | "id": 1, 71 | "title": "更改好了!", 72 | "content": "好耶!", 73 | "view": 0, 74 | "status": 1, 75 | "created_at": 1638257438, 76 | "start_time": 1638257437, 77 | "end_time": 0 78 | } 79 | ], 80 | "total": 1 81 | }, 82 | "msg": "ok", 83 | "error": "" 84 | } 85 | ``` 86 | 87 | - status:200 表示正常/成功,500 代表错误。自行了解**HTTP状态码**。 88 | 89 | - data:业务数据。所有的业务信息都应该放到 data 对象上。 90 | 91 | - id:备忘录时间 92 | - title:备忘录题目 93 | - content:备忘录内容 94 | - view:备忘录查看次数 95 | - status:备忘录状态 96 | - start_time:开始时间 97 | - end_time:结束时间 98 | 99 | - total:总条数 100 | 101 | - msg / err:表示返回信息或是错误信息。 102 | 103 | 104 | 105 | ## 推荐教程 106 | 107 | - 使用 Gin 设计 RESTful APIhttps://blog.csdn.net/flysnow_org/article/details/103520881 108 | - B站Gin教程:https://www.bilibili.com/video/BV1fA411F7aM?p=1 109 | - Gin中文文档:https://www.kancloud.cn/shuangdeyu/gin_book/949412 110 | - Gin知识点总结:https://blog.csdn.net/weixin_45304503/article/details/120381359 111 | - Gorm中文文档:https://learnku.com/docs/gorm/v2 112 | - B站教程:https://www.bilibili.com/video/BV1GT4y1R7tX 113 | 114 | -------------------------------------------------------------------------------- /3.备忘录/案例/CocaineCong_第三轮/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("HelloWorld") 7 | } 8 | -------------------------------------------------------------------------------- /4.大作品/4.【第四轮考核】大作品.md: -------------------------------------------------------------------------------- 1 | # Golang 第四轮考核 2 | 3 | ## 任务目的 4 | 5 | - 掌握http协议和Web工作原理 6 | - 掌握使用关系型数据库,如:mysql 7 | - 了解使用非关系型数据库,如:redis 8 | - 学习**RESTful API**接口规范 9 | - 学习编写文档 10 | 11 | 12 | ## 考核任务 13 | 14 | 金三银四来了!FanOne 正在准备面试,由于过于卷,于是想放松一下看一下番剧,可惜她又没有`大会员`,请你写一个**弹幕视频网站**(写 API 文档接口即可),让LWGG能在没有大会员的条件下开心的追番吧! 15 | 16 | (代码需提交到`Github`上去) 17 | 18 | 19 | ## 基础功能 20 | 21 | ### 用户模块 22 | 23 | 1. 用户的登录注册 24 | 2. ⽤户个⼈资料展示与修改,⽀持修改头像。 25 | 3. 更改密码 26 | 27 | ### 视频模块 28 | 29 | 1. 用户上传自己的视频 30 | 2. 点赞 / 评论 / 收藏 / 转发 他人的视频 ( 注意**评论**可以有**回复**的噢!) 31 | 3. 发送弹幕 32 | 4. 视频点击排行榜 **( 提示:redis,选做 )** 33 | 34 | ### 管理员模块 35 | 36 | 1. 视频审核 37 | 2. 用户管理(拉黑,封号) 38 | 3. 评论管理 39 | 40 | 41 | ## 高级功能 42 | 43 | ### 搜索 44 | 45 | - 搜索视频,用户。 ( 搜索条件包括但不限于:年份,类别,发布时间等等...)条件一定要 **>=4** 个 46 | - 保留所有的历史搜索记录( 可以使用redis ) 47 | - 多条件筛选视频 ( 点击量和题目等等... ) 48 | 49 | ## 下一轮 50 | 51 | - 了解一下 WebSocket,轮询。 52 | - 一对一,一对多通信。 53 | - Docker、RPC调度。 54 | -------------------------------------------------------------------------------- /4.大作品/案例/CocaineCong_第四轮/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("HelloWorld") 7 | } 8 | -------------------------------------------------------------------------------- /5.即时通讯/5.【第五轮考核】即时通讯.md: -------------------------------------------------------------------------------- 1 | # Golang 第五轮考核 2 | # 任务目的 3 | 4 | - 掌握Http协议和Web工作原理 5 | - 掌握 WebSocket 原理与实践 6 | - 掌握关系型数据库的基本操作 7 | 8 | # 考核任务 9 | 众所周知,FanOne是个家喻户晓的**Aquaman**,她经常在社交软件上找小哥哥们聊天,以至于被多个平台封杀,请你写一个IM即时通信系统,让FanOne能聊天自由吧! 10 | 11 | # 推荐库 12 | 13 | - `github.com/gorilla/websocket` 14 | - 推荐gin框架暴露http路由 15 | 16 | # 基础任务 17 | - 编写一个 IM 即时通信系统 支持单聊,群聊 18 | 19 | 可以使用`postman`进行测试,后续可能会有**合作**,注意编码,接口规范。 20 | 21 | # 下一轮 22 | 23 | - 了解一下 RPC 调度。 24 | - 了解一些主流的微服务框架go-micro,go-zero,go-grpc等等。 25 | - 了解消息队列RabbitMQ,RocketMQ,Kafka等等。 26 | 27 | -------------------------------------------------------------------------------- /5.即时通讯/案例/CocaineCong_第五轮/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("HelloWorld") 7 | } 8 | -------------------------------------------------------------------------------- /6.微服务/6.【第六轮考核】微服务.md: -------------------------------------------------------------------------------- 1 | # Golang 第六轮考核 2 | 3 | # 任务目的 4 | 5 | - 掌握微服务架构和Web工作原理 6 | - 掌握HTTP协议和RPC调度方法 7 | - 掌握BASE、CAP理论 8 | 9 | # 考核任务 10 | 11 | 由于疫情封校了,FanOne和小哥哥们外出Happy的计划泡汤了,只能在宿舍一起网聊。但长期沉迷网聊的FanOne,忘记了即将到来的考试。为了帮助FanOne有计划的复习考试,请你写一个基于**微服务架构**的备忘录,帮助FanOne记录任务,渡过难关! 12 | 13 | 14 | # 推荐库 15 | 16 | - `github.com/grpc/grpc-go` 17 | - `github.com/zeromicro/go-zero` 七牛开源RPC框架 18 | - `github.com/go-kratos/kratos` B站开源RPC框架 19 | - `github.com/cloudwego/kitex` 字节开源RPC框架 20 | - `github.com/TarsCloud/TarsGo` 腾讯开源RPC框架 21 | - `github.com/apache/dubbo-go` 阿里开源RPC框架 22 | - `github.com/douyu/jupiter` 斗鱼开源RPC框架 23 | - `google.golang.org/protobuf` 24 | 25 | 每个厂都会有自己开源的RPC框架,选择哪个RPC框架都无所谓,主要是学习微服务的思想,本质都是一样的。 26 | 27 | 建议学习一些资料较为完善的RPC框架,比如grpc-go, 28 | 29 | 这里不推荐go-micro,因为国内用的少且版本比较混乱。 30 | 31 | # 基础任务 32 | ## 用户模块 33 | - 实现基本的用户注册登录(保证不同用户之间的隔离) 34 | ## 事务模块 35 | 增: 36 | - 添加一条新的待办事项。 37 | 38 | 改: 39 | - 将 一条/所有 代办事项设置为已完成。 40 | - 将 一条/所有 已完成事项设置为待办。 41 | 42 | 查: 43 | - 查看所有 已完成/未完成/所有事项。 (需要分页) 44 | - 输入**关键词**查询事项。(需要分页) 45 | 46 | 删: 47 | - 删除 一条/所有已经完成/所有待办/所有事项。 48 | 49 | # 下一轮 50 | - 了解一下Gin、Gorm、Redis的底层原理 51 | -------------------------------------------------------------------------------- /6.微服务/案例/CocaineCong_第六轮/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("HelloWorld") 7 | } 8 | -------------------------------------------------------------------------------- /7.底层实现/7.【第七轮考核】底层实现.md: -------------------------------------------------------------------------------- 1 | # Golang 第七轮考核 2 | # 任务目的 3 | 4 | - 掌握Web底层工作原理 5 | - 掌握Orm库的底层工作原理 6 | - 掌握缓存库的设计原理 7 | 8 | 9 | # 基础任务 10 | > 以下内容三选一进行完成即可 11 | 12 | ## 1. 基于net/http库实现类似Gin框架的Gout Web框架 13 | 14 | > 该Web框架具备以下功能 15 | 16 | - 路由支持GET、POST、DELETE、PUT功能 17 | - 实现Context功能 18 | - 嵌入log、cors、recovery等middleware 19 | 20 | 使用Gout库实现简单的HTTP的请求与响应 21 | 22 | 23 | ## 2. 基于database/sql库实现类似Gorm框架的go-orm框架 24 | 25 | > 该orm框架具备以下功能 26 | 27 | - 能进行表的结构映射 28 | - 实现简单的create、update、find、delete等等api接口 29 | - 支持事务 30 | 31 | 使用go-orm对数据库表进行处理 32 | 33 | ## 3. 针对mysql的业务操作使用redis实现一个cache中间件 34 | 35 | > 该cache用于提高mysql的查询速度,缓存库具备一下功能 36 | 37 | - 当查询数据在redis中存在时,就在redis中读取,否则在mysql中读取并写入redis 38 | - 当进行增加、删除和修改操作时,redis数据进行更新 39 | - 需要保证mysql与redis的双写一致性 40 | 41 | benchmark进行测试,至少保证10k的并发读写量。 42 | 43 | # 下一轮 44 | - 暑期合作 45 | -------------------------------------------------------------------------------- /7.底层实现/案例/CocaineCong_第七轮/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("HelloWorld") 7 | } 8 | -------------------------------------------------------------------------------- /8.合作/8.【第八轮考核】合作.md: -------------------------------------------------------------------------------- 1 | # Golang 第三轮考核 2 | 3 | 由于我们学校的工作室有很多方向 4 | 5 | >前端,ios,安卓,java,go,python,unity,pm,美工等等... 6 | 7 | 所以最后一轮通常就是合作轮。 8 | -------------------------------------------------------------------------------- /8.合作/案例/CocaineCong_第八轮/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Println("HelloWorld") 7 | } 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 FanOne 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Go语言学习入门路线 2 | 3 | # 写在前面 4 | > 这篇文章是我自己亲身经历这样去学go的,本人是从`20年的10月份`开始入坑go语言的,当时的资料真的少,现在关于go语言的资料已经很多了。 5 | > 我就在把我自己的学习路线稍微梳理一遍,我个人觉得,学完之后,**像深信服,b站,得物什么的应该是没什么问题,** 但如果是`字节,腾讯,阿里这种就除了一些硬性条件之外,自己再刷多点题,背多点八股了。` 6 | 7 | ## 全部练习项目都在github这个仓库中`https://github.com/CocaineCong/Golang-Learning` 8 | 9 | **适合大一、大二、或是其他语言转go的同学** 10 | 11 | 这些是提升自己业务能力的一个方法流程,但是如果是要做工作、实习的话,还是另外的流程去学习,不单单是这个,`为什么我精通curd ?还找不到工作?` 这个我们下一次再总结说说,**因为这些其实只是入门而已,只是扩展我们的广度,还没能很好的深入学习。** 12 | 13 | # 交流学习 14 | 大家可以把自己的想法或代码 pr 到对应的目录下面,**注意命名即可**! 15 | 16 | **比如说 1.基础语法/案例/xxx(github的名字)_第N轮** 17 | 18 | # 1. 【第一轮】基础部分 19 | ## 1.1 教程 20 | 21 | Go语法这方面一定要注重好基础,比如数组,切片,map,chan这种基础的数据类型。 22 | 23 | 语法入门可以看这个 [入门教程](https://www.bilibili.com/video/BV1SS4y1T7kJ),主要是挺新的这个教程。 24 | 25 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/4bafac6684e4471791c59f924b1e0a2f.png) 26 | 27 | 28 | 建议有基础的同学直接看这个 [提升视频](https://www.bilibili.com/video/BV1sy4y1H7Cd) 29 | 30 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/3ffbf1f5d07e46f89ba6de203c7af099.png) 31 | 32 | 附上我自己做的思维导图 33 | ![请添加图片描述](https://img-blog.csdnimg.cn/2254fcf934c742fbb2f1ae33932812de.png) 34 | 35 | 36 | ## 1.2 练习 37 | 可以选择 PTA 上面的题目来进行练习。 38 | 39 | [PTA练习](https://pintia.cn/problem-sets/994805046380707840) 40 | 41 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/3cb0e763329c48fd94d3b9ec5517f18a.png) 42 | 43 | 我的 Go语言入门 60题 专栏。[入门60题](https://blog.csdn.net/weixin_45304503/category_11294773.html) 44 | 45 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/831f8ce0eb7f4395a35d812c5043987b.png) 46 | 47 | # 2. 【第二轮】网络爬虫 48 | ## 2.1 教程 49 | 用 go 去做爬虫,主要是为了`了解http的请求与响应`,了解 web中参数的传递,页面的布局,点击逻辑等等... 为之后的web开发奠定基础用的。 50 | 51 | 同样的,我们也可以学习到并发爬虫,这样也用到了我们go语言`天生支持高并发`的特性。 52 | 53 | 这个是我录制的一个关于Go语言爬虫的练习 [Go语言爬虫](https://www.bilibili.com/video/BV1CR4y1g7wB/) 54 | 55 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/e0901d3539084d729095ff34e07aca3e.png) 56 | 对应的案例的代码也放在了github上 [GitHub案例](https://github.com/CocaineCong/Go-Spider-Demo) 57 | 58 | 这个是我自己写的关于爬虫的一个思维导图的总结。 59 | ![请添加图片描述](https://img-blog.csdnimg.cn/832f52c810a24568b25d763ed484e90b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP55Sf5Yeh5LiA,size_20,color_FFFFFF,t_70,g_se,x_16) 60 | 61 | 62 | ## 2.2 mod 管理第三方包 63 | 64 | **到这里之后,我们可能会用到第三方的工具包,这时候我们就要用go mod去管理我们的第三方包文件了,而go mod如何去理解?** 65 | 66 | 这个视频我觉得讲的很不错了:[Go Mod理解](https://www.bilibili.com/video/BV1w64y197wo) 67 | 68 | 69 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/71849a99e95944a5a05eebc49c885c75.png) 70 | 71 | ## 2.3 git 机制 72 | 73 | 那么我们之后还需要用到`git`,像`git`我们应该怎么学习呢? 74 | 我的建议是**git一定要自己多用,多记录一些常用的命令。** 75 | 教程的话,可以看看这个git教程:[GIT教程](https://www.bilibili.com/video/BV1FE411P7B3) 76 | 77 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/671ecb2cb4424c1ab05a42500f18ab0e.png) 78 | 79 | 一开始用 git,我们可以先用熟 commit、push、pull 啥的,之后再用多一些在`项目版本的管理`上,之后我们就可以再学去做`解决冲突`。 80 | 81 | # 3. 【第三轮】备忘录 82 | 接下来就到我们的后端开发了,前面`第一轮打好了基础`,`第二轮懂了一些网站的请求与响应`,接下来就可以进行开发了。 83 | 84 | 这一轮我们重点是放在规范上,比如**命名规范,项目结构规范,接口定义规范,返回规范**等等... 85 | 86 | 这一轮其实我们就做一个简单的备忘录而已。在熟悉规范的同时,`以练带学`,不断通过项目去学习框架,gin、gorm。 87 | 88 | 跟着敲就好了。 89 | 90 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/c67f57e45bcb429985cb2319a5883c03.png) 91 | 92 | 93 | 视频:[gin+gorm备忘录 视频教程](https://www.bilibili.com/video/BV1GT4y1R7tX) 94 | Github地址:[gin+gorm备忘录 源码](https://github.com/CocaineCong/TodoList) 95 | 96 | # 4. 【第四轮】商城 or 视频网站 97 | 当我学习完规范之后,我们就开始深入学习业务了,这时候我们就可以开始做一个大一点的项目,比如商城,视频网站之类的。 98 | 99 | 这个时候我们就可以去接触redis、docker这些比较流行的技术了。 100 | 101 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/340eb2e20be84ee3ac4f981c2be022ae.png) 102 | 103 | 104 | [视频链接](https://www.bilibili.com/video/BV1Zd4y1U7D8) 105 | 106 | [源码地址](https://github.com/CocaineCong/gin-mall) 107 | 108 | 109 | # 5. 【第五轮】IM 即时通信 110 | 除了基础业务的处理之外,我们还要了解 websocket 通信,这个也是一个必不可少的技术。 111 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/2d92b96c80dc4ad78feef93f903861e4.png) 112 | 113 | [视频地址](https://www.bilibili.com/video/BV1BP4y1H7gV) 114 | [Github源码地址](https://github.com/CocaineCong/gin-chat-demo) 115 | 116 | 117 | # 6. 【第六轮】微服务 118 | 在学习完业务处理,ws处理之后,我们再开始微服务框架的学习。理解proto的作用,理解 rpc 的过程,服务发现,服务注册等等... 119 | 120 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/6386a244d1ec4b08ad835624b4e05772.png) 121 | [视频链接](https://www.bilibili.com/video/BV1fS4y177og) 122 | [Github源码地址](https://github.com/CocaineCong/gRPC-todoList) 123 | 124 | # 7.【第七轮】底层架构 125 | 在我们熟悉完上面的技术框架之后,我们有了广度,**在我们有了广度的条件下,我们可以往其中一个方向进行深度的专研。** 126 | 127 | 比如说 极客兔兔的手撕框架,可以自己找一个来实现。 128 | 这个就很完美了 [极客兔兔链接](https://geektutu.com/post/gee.html) 129 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/a0569b9afd8a4d359846e6d383296d21.png) 130 | 131 | 132 | --------------------------------------------------------------------------------