Go语言的实战案例 | 青训营

73 阅读2分钟

Go语言的实战案例

今天是我参与青训营 伴学笔记创作活动的第 1 天

本堂课重点内容:

  • Go语言基础语法

  • Go语言实战案例

    • 猜谜游戏
    • 在线词典
    • Socks5代理

课程实践

2.1猜数字大小

在完成这个例子的课后习题时,也就是第一道题,我一开始使用fmt.Scanf()进行代码简化,遇到了一些问题,循环总是会多次进行,并且第二次的guess值一直是0。我思考了一下,并且查阅了一些资料,发现原来是fmt.Scanf()会把输入数字之后的空格也放入缓存区里,所以缓存区会有两个东西,循环也就进行了两次。解决方法就是在format里面手动加一个\n来吃掉这个空格就可以了。 首先使用随机数需要先设置种子

scss
复制代码
go
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)

使用bufio.NewReader(os.Stdin)获取用户的输入流,比较大小并置于循环中 strconv.Atoi可以快速将十进制字符串转化为数字

2.2线上字典

功能实现的主要思想:首先构造结构体来对应要发送的json信息,将结构体序列化得到字节数组,再将其转化为字节流然后调用接口。
接收响应消息,响应体resp.Body是io.ReadCloser类型,也是一种流,将其转化为字节数组,再进行反序列化即可得到结果。 课后思考: 输入bufio--去换行符--转为整数 或者scanf也可以 代码生成:在开发者工具页面复制curl到curlconverter.com/go/可以生成代码,自动设置好请求头等内容,方便编码。 oktools.net/json2go 是josn转go结构体的,可以将网页的返回信息复制得到对应接口的结构体。
响应体resp.Body使用io.ReadAll方法转化为字节数组[]byte.再使用Unmarshal反序列化。

2.3代理服务器

原理:通过代理服务器与网页建立tcp请求,代理服务器获得响应后将内容返回给客户端。 net.Listen监听一个端口server.Accept()接收一个请求得到一个连接client