这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
课堂笔记
- 本堂课的知识要点有哪些?
1. Go语言的特性
2. Go语言基础的语法有哪些
- 本堂课介绍了哪些知识点?
(一)Go语言的特性
- 高性能,高并发
- 语法简单,学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
(二)Go语言基础的语法
- 定义变量
- for循环
- if条件判断
- switch分支结构
- 数组与切片
- 最常用的数据类型map
- for range循环
- 函数
- 指针
- 结构体和结构体方法
- 错误处理
- string包处理字符串
- fmt包
- json的序列化和反序列化
- time包
- strconv包
- 进程信息
- 有什么实践举例帮助理解知识点?
猜数游戏
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
// fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
continue
}
input = strings.Trim(input, "\r\n")
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
continue
}
fmt.Println("You guess is", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again")
} else {
fmt.Println("Correct, you Legend!")
break
}
}
}
猜数游戏的实现可以清楚明白的了解变量的定义,错误处理,字符串处理,if条件判断,for循环,fmt包,strconv包等等
其中需要注意的是
1.rand包不能直接用Intn方法,这样两次尝试的随机数是一样的,应该先调用Seed方法通过当前的时间戳(因为时间在变化,所以时间戳是在随机变化的,增加了其随机属性)
2.因为input的值后缀带有不需要的转义字符,所以调用Trim方法:Trim返回字符串的一个片段,其中删除了剪切集中包含的所有前导和尾随Unicode代码点。
3.若要确保代码的安全和严谨性,调用的大多数方法都会返回error,这时候我们都要进行一个error是否为nil的判断,如果不为空, 可以进行continue或者fatal,而在方法中,我们更需要的是return err而不是直接对error进行处理,因为这样更可以让调用方法者得到这个error再让其进行处理
在线词典
req.Header.Set("Connection", "keep-alive")
在线词典让我们直接接触了接口api的对接,其中学习到使用Header的Set方法来进行配置请求头,和如何在需要进行接口对接的网站中使用浏览器的检查工具知道其请求url和快速配置header.
err = json.Unmarshal(bodyText, &dictResponse)
对基础语法的json序列化和反序列化做出了举例,让人更加清晰易懂的知道json格式与代码中的数据的具体表现和互相转化
- 本章有什么知识点不容易掌握?
1.http请求需要计算机网络基础,涉猎请求头等等信息
2.涉及很多字符串的处理
3.涉及很多结构体方法,如果是初学者要先了解这个方法的大致作用才能看懂程序的意思