Day1 golang基础语法实战案例 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
猜谜游戏
流程为
- 生成一个数字作为答案
- 获取用户输入的字符并转换为数字
- 比较答案和用户输入的数字的值,如果相等则结束游戏,否则继续让用户输入
这个流程中要对用户的输入做错误处理,因为用户输入的值并不总是正确的
首先是随机数的生成部分
使用如下的函数即可获取一个随机数
rand.Seed(seed)
但是如果不设置随机数种子的话,生成的随机数就会永远是同一个
课程中示范使用当前的时间戳作为随机数种子
由于我是一个喜欢特立独行的人
这里我使用变量的指针地址作为随机数种子,即用空间的值作为随机数种子
maxNum := 100
seed, _ := strconv.ParseInt(fmt.Sprintf("%v", &maxNum)[2:], 16, 64)
rand.Seed(seed)
answer := rand.Intn(maxNum)
下一步是获取用户的输入
使用fmt.Scan()
函数即可获取用户的输入并自动绑定值给变量
例子如下
var num int
fmt.Scan(&num)
掘金课上的案例是使用bufio.NewReader(os.Stdin)
来作为用户输入的处理
用go打过算法的都知道使用使用reader处理输入会比fmt.Scan
更快一些,输出也是一样
不过这里使用fmt.Scan
,更方便一些,以及作业要求用这个
最后一步直接用if else判断数字大小就行
在线词典
流程如下
- 获取用户输入的单词
- 对固定api进行网络请求并获取请求结果
- 对输出结果进行筛选然后再输出到命令行
第一步获取用户的输入可以使用os.Args
例如go run main.go a b c
,连着main.go
和后面的a
,b
,c
都会被作为args参数读入
第二步是使用http库对翻译网站的api进行请求,由于我是一个喜欢特立独行的人,因此我并不使用golang内置的http请求库,我使用req
工具库
首先请求api时使用的请求数据和响应结果都需要用go结构体代码进行映射,因此先定义所需的数据结构 这种复杂繁琐的工作就不自己来做了,掘金课介绍了一个网站可以自动将json转换所需的go结构体代码 oktools.net/json2go
用法很简单,进入翻译网站,打开开发者工具,然后查看网络请求
负载即这次请求所用的请求数据
响应下是这次请求的响应数据
直接复制json粘贴到工具网站就可以转换了
req请求api使用如下
type CaiyunRequestBody struct {
...
}
type CaiyunApiResult struct {
...
}
func main() {
client := req.C().DevMode()
var result CaiyunApiResult
resp, err := client.R().
SetBody(&CaiyunRequestBody{...}).
SetResult(&result).
Post("https://httpbin.org/post")
...
}
请求过程中还需要用到请求头 下面这个网站可以获取所需要的请求头 Convert curl commands to Go (curlconverter.com)
点击复制为cURL
然后粘贴到curlconverter.com就能获取所需的一堆请求头
复制req.Header.Set
开头的代码
并批量将他们改为client.SetCommonHeader
开头
vim下这个批量修改操作可以使用:%s/req.Header.Set/client.SetCommonHeader/g
来进行
然后是对结果进行输出,这个步骤就是无脑查看结构体,然后调需要的部分进行输出即可
作业要求并行查询两个翻译api
并行查询那就得用go的一大特性goroutine
了
大致流程如下
w := new(sync.WaitGroup)
w.Add(2)
go query1(...)
go query2(...)
w.Wait()
其中w.Add()
就是使用计数器来觉得需要等待完成的协程数量
然后用w.Wait()
就可以让当前的程序等待协程执行完毕
query1
和query2
就是所用到的查询函数了
在两个查询函数定义大致如下
func query(w *sync.WaitGroup, ...) {
defer w.Done()
...
}
w.Done
的作用就是让计数器知道当前有一个协程已经执行完毕了
相当于w.Add(-1)
当计数器的值为0,这个WaitGroup将不会再继续等待
当计数器的值小于0,会报错
sock5代理
WIP
本文作者:七つ一旋桜
本文链接:https://www.cnblogs.com/poifa/p/17716926.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步