- 新建腾讯在线文档《资料汇总》《进度跟进》
- 本来想VsCode配置,太烦了,Goland走起
- IDM加速下载真的很香!
- 永久激活(Jetbrains全家桶+1嘿嘿)
- 配置SDK
- 运行helloworld(控制台会有些多余信息输出)
- git clone了示例代码
- 依靠着前几次用git总结的命令行顺利进行
- 被学校的水课磨灭了梦想,在这里又找到一些学习的欲望和新鲜感
- 组织的哥哥姐姐(前辈)人真的超好,没有架子,飞书通知也写得很明白清楚
- 一开始想当组员最后还是做了组长,那就好好做吧
- 对Go其实基本没用过的,假期想学也只是三分钟热度,希望这次集中精力学好
这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
Day01 第一课 Go基础讲师:王克纯
一、课程简介- Go系列课程:基础语言、工程实践、高质量编程与性能调优、发行版优化与落地实践
- 基础语言:猜谜游戏、命令行词典、SOCKS5代理
- 高性能、高并发:和C/C++媲美的性能、调用标准库实现高并发
- 语法简单、学习曲线平缓:10行实现http服务器
- 丰富的标准库
- 完善的工具链:编译、代码格式化、单元测试框架
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
字节、腾讯、百度、谷歌、美团、滴滴等
1.3为什么用Go1.最初使用的Python,由于性能问题换成了Go
2.C++不太适合在线 Web业务
3.早期团队非Java背景
4.性能比较好
5.部署简单、学习成本低
6. 内部 RPC和 HTTP框架的推广
- 安装Golang
- VsCode/Goland
- Github下载example代码
- Hello World
- 变量
- var a =
- f :=
- const s string =
- ifelse
- 没有()
- 必须一行,后接{
- 循环
- 只有for
- 没有()
- switch
- 不需要break
- 可以简化ifelse
- 数组
- var a [5]int
- 切片(常用)
- 长度可变
- 创建:s := make([]string, 3)
- 追加append
- 左闭右开
- map
- 创建:m := make(map[string]int)
- 是否存在:r, ok := m["unknow"]
- range
- 遍历返回索引和值
- 函数
- 遍历类型后置
- 返回两个值:1.真正返回值;2.错误信息
- 指针
- 默认拷贝传参,需要加* 引用传递
- 结构体
- 对应类
- 结构体方法
- 对应类成员函数
- 错误处理
- 返回值加err error
- 字符串操作
- Contains
- Count
- …
- 字符串格式化
- printf 的 %v (%+v、%#v)
- JSON处理
- 结构体中的变量名首字母大写
- 序列化json.Marshal()
- 打印时需要string()
- 时间处理
- time.Now()
- time.Date()
- .Unix()获取时间戳
- 数字解析
- import strconv
- ParseInt(字符串, 进制, 精度)
- 进程信息
- import os
- os.Args
- os.Getenv("PATH")
- Q1:Invalid input. Please enter an integer value
- A1:Win环境需要rn:input = strings.TrimSuffix(input, "rn")
- 调用彩云翻译的api(兴奋) fanyi.caiyunapp.com
- 生成代码,解析request bodycurlconverter.com/#go
- defer会在函数结束后从下往上出发,关闭流,防止内存泄漏
- 生成代码,解析response bodyoktools.net/json2go
- 运行-命令行go run simpleDict/v4/main.go walnut
- 代理:用于提供单一接口,访问公司内部网
- 工作原理,四个阶段:
- (1)协商/握手阶段
- 认证方式
- 跳过,因为实现的是不加密代理
- (2)认证阶段
- (3)请求阶段
- (4)relay阶段
- 转发响应结果
- (1)协商/握手阶段
- TCP echo server实现
- process处理连接
- go关键字,减小开销,轻松处理上万并发
- bufio.NewReader带缓冲的字节流
- 先读1KB,再1字节1字节地读
- nc 127.0.0.1 1080?
- Q1:无法将“nc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
- A1:??(要配置go mod proxy后重启,才能代码补全)
- Q2:PowerShell执行,报错:main.go:4:2: package bufio is not in GOROOT
- A2:??
- auth
- curl --socks5 127.0.0.1:1080 -v http://www.qq.com
- request
- 这部分优点没学明白
- relay
- copy(dst, src)是单向拷贝,所以需要两个go func(){}
- 采用context.WithCancel(),这样出错时可以及时cancel()关闭
- Q3:找不到接受实际参数“127.0.0.1:1080”的位置形式参数。
- A3:??
- Go学习路线图
- 课后作业
- 建议按行读取,不要scanf
- alt+点击结构,可以跳读源码
-
- Q:请问go的字符串拼接效率问题,一般考虑到综合易用性和性能,推荐使用 strings.Builder 来拼接字符串。但为什么有的文章会说标准编译器对使用+运算符的字符串衔接做了特别的优化。 所以,一般说来,在被衔接的字符串的数量是已知的情况下,使用+运算符进行字符串衔接是比较高效的。请问下一般在项目中如何拼接字符串是比较高效合理的呢
- A:(1)写代码不建议一开始就性能优化。(2)建议strings.Builder拼接。+确实有优化。
- cmd和Bash不一样,会导致问题
- SOCKS5协议的讲解
- 知识点密集,不罗嗦不废话,几秒一个点
- 在线词典的实战很吸引我,因为调用了在线网页的功能



