这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。
前言:
记录自己学习过程中的问题和反思,同时附上一些学习资料,方便自己也方便他人复习。
项目一:《猜谜游戏》
问题:输入数字不合法
关键代码
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
if err != nil { // (1)
fmt.Println("An error occurred while reading input. Please try again", err)
continue
}
input = strings.TrimSuffix(input, "\n")
guess, err := strconv.Atoi(input)
if err != nil { // (2)
fmt.Println("Invalid input. Please enter an integer value")
continue
}
......
}
解决办法
由提示知错误在(2),把ReaderSrting('\n')和TrimSuffix("\n")都转成byte数组输出看一眼:
首先查询ASCALL码知,13是'\r'回车符,10是'\n'换行符,原来windows系统每行结尾是'\r\n',Unix每行结尾是'\n',Mac Os每行是'\r',(原谅我今天才知道),然后查看官方文档知,ReaderSrting(delim byte)会读取以delim为分隔符前面的数据包括delim并以字符串的形式返回,TrimeSuffix(s string,suffix string)会将字符串s去掉后缀字符串suffix后的剩余字符串返回,因此前面strconv.Atoi(input)传入的字符串input每次都会带后缀'\r'导致出错,所以
法一
把 strings.TrimSuffix(input, "\n") 改为 strings.TrimSuffix(input, "\r\n")
法二
使用ReadLine(),ReadLine()会读取'\r\n'或'\n'之前的数据并以byte数组的形式返回,所以要在后面加个字符串的类型转换,即strconv.Atoi(string(input))
reader := bufio.NewReader(os.Stdin)
for {
input, _ ,err := reader.ReadLine()
...... // (1)
guess, err := strconv.Atoi(string(input))
...... // (2)
......
}
PS:
课后作业也要记得加'\r\n'嗷
var guess int
_, err := fmt.Scanf("%d\r\n", &guess)
项目二:《简易词典》
问题
复制dict请求的cURL(cmd)的内容在Convert curl commands to code无法转换,原因还不知道
解决办法
改为复制dict请求的cURL(bash)
项目三
问题
windows系统默认不支持nc指令
解决方法
PS:
- 下载和解压的时候注意关闭杀毒软件防止系统删除
- 可以把nc.exe配置到任意路径但是得配置PATH环境变量