go语言实战案例 | 青训营笔记

75 阅读2分钟

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

一、本堂课重点内容:

  • 本堂课的知识要点有
    • 实现一个随机数的猜测:生成随机数,读取输入。
    • 实现一个在线词典:发送合同谈判请求,解析json格式
    • sockss5 代理

二、详细知识点介绍:

  • 1,生成随机数:需要先生成一个随机数种子,不然会老是生成同一个随机数 `

maxNum := 100

rand.Seed(time.Now().UnixNano())

secretNumber := rand.Intn(maxNum)

fmt.Println("The secret number is ", secretNumber)`
  • 2,读取一行输入

`

reader := bufio.NewReader(os.Stdin)

input, err := reader.ReadString('\n')   
  • 3,在线词典:
    • 调用第三方,并且打印出来(发送http请求,解析json
    • win11:在浏览器按F10,点击网络——Fetch/XHR ——dict——右击选择复制为cURL(bash)复制到Convert curl commands to Go (curlconverter.com),就可以生成第一个版本
    • 使用 oktools.net/json2go 将返回的json字符串生成相应的结构体,然后利用json.unmarshal将body反序列化到这个结构体中
    • 最后打印出我们所需要的内容
  • 4,sockss5 代理介绍
    • 四大阶段
      • 协商阶段
      • 请求阶段
      • 建立阶段
      • relay阶段
    • 先用net.listen去监听一个端口 会返回一个server
    • 一个死循环 每次接受一个accept 然后执行process函数
    • 用bufio.NewReader来创建一个带暖冲的只读流
    • 调用auth函数,认证阶段
    • 调用connect函数,实现请求阶段,对报文进行分析,建立端口链接,实现双向转发数据

三、实践练习例子:

  • 对于课程提供的代码,加上注释,可以起到深入理解的程度。
  • 对于每一个代码都是渐进式的发展可以按顺序看下来,一步一步去理解代码的含义。

四、课后个人总结:

  • 对于基础的语法知识进一步巩固,学习到了
net.Listen   端口监听
bufio.NewReader   带缓冲区的只读流
reader.ReadByte()  读一个字节
go关键字:代表启动一个goroutinue