这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
Day1:基础语言
因为有Go语言的基础知识,所以前面的例子相当于帮忙复习一遍基础知识。
项目实战的知识点补充:
1.猜词游戏
关键知识点是Go的随机数需要种子才能实现随机,如rand.Seed(time.Now().UnixNano())
补充一个Go语言在写笔试题遇到的读数据超时问题:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
var s string
fmt.Fscan(in,&s)
}
2.词典翻译
首先是GET两个新工具。
curlconverter.com/#go 用于解析URL bash为Go代码,极大地方便Web开发
oktools.net/json2go JSON转结构体也是一个超实用功能
同时巩固了数据读写:
读单个字节:
b, err := reader.ReadByte()
把method数组读满:
_, err = io.ReadFull(reader, method)
关于课后作业。选取了www.deepl.com/translator#… ,读取URL转换成Go代码。利用strings.Replace替换词语为输入单词。来实现第二个搜索引擎的单词,此外需要解析相应的JSON为结构体数据。需要注意好数组、对象的区别。
3.proxy代理服务器
从day3回来发现自上而下写逻辑代码,然后用额外的函数填充真的非常有利于阅读。优秀的编码习惯实在太帅了,字节UPUPUP!
先对代理服务器定义。首先需要Auth模块对客户端请求鉴权,除了socks5,还运用于HTTP转HTTPS,中继网关验证请求,用于RPC调用的注册中心的验证工作。核心检验connect请求是否按照对应格式进行请求,若请求失败则利用fmt.ErrorF通知鉴权失败。
第二步才是对目标服务器进行请求连接并发送数据。需要解析版本号、请求、目标地址类型【因为通信包括ipv4,ipv6,host,可能还有本机socket通信】。凭借以上信息,代理服务器才得知需要建立连接通信的目标服务器信息。随后与目标服务器建立连接并启动两个协程执行转发工作io.Copy(A,B)可以实现将数据从B读出并写入到A。
小细节补充:经过实验demo,我们可以得知b, err := reader.ReadByte() 负责从Socket缓存区读字符到用户程序。_ , err = conn.Write([]byte{b})负责将用户程序的数据写入到Socket缓存区。具体的收发操作都依赖于操作系统实现。
工作量比想象中的多=-=于是后面两天的,明天再来复盘把!
最后,非常感谢字节跳动提供这个青训营机会。真的非常棒,dream company哈哈哈。