这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、课前准备
- 安装goland开发环境和git版本管理工具
- 阅读Go语言圣经(中文版)
- 简单查阅go语言学习线路图
二、知识点介绍
1. go语言优势
- 高性能、高并发
- 标准库丰富、工具链完善
- 静态链接、快速编译
- 垃圾回收
- 跨平台
2. 基础语法
-
if/else语句、switch语句、for循环表达式
- go在完成case块后默认停止switch语句
-
数组
-
切片slice
- 使用append,要将结果赋值为原数组
- 切片只有三个元素:指向基础数组中首个可访问元素的指针、长度、容量
- 切片是基础数组的一个子集
-
map、使用range循环遍历map
- map无序
- 使用前先使用make声明
- 使用delete操作键值对
-
函数的创建与使用
-
结构体、结构体方法
-
指针
- 作用有限,主要用途是对传入参数进行修
-
函数的声明与调用
- 原生支持返回多个值
-
错误处理
- 始终检查是否存在错误,即使预期不存在。 然后正确处理它们,以免向最终用户公开不必要的信息。
- 在错误消息中包含一个前缀,以便了解错误的来源。 例如,可以包含包和函数的名称。
- 创建尽可能多的可重用错误变量。
- 了解使用返回错误和 panic 之间的差异。 不能执行其他操作时再使用 panic。 例如,如果某个依赖项未准备就绪,则程序运行无意义(除非你想要运行默认行为)。
- 在记录错误时记录尽可能多的详细信息(我们将在下一部分介绍记录方法),并打印出最终用户能够理解的错误。
-
字符串操作、字符串格式化
-
bytes、strings、strconv、unicode包提供大量字符串处理功能
-
%v 只输出所有的值
%+v 先输出字段类型,再输出该字段的值
%#v 先输出结构体名字值,再输出结构体(字段类型+字段的值)
-
-
JSON处理
-
时间处理
-
数字解析
-
进程信息
三、实践练习
- 使用fmt.Scan优化猜谜游戏,省略 bufio.NewReader(os.Stdin) 和 strings.Trim(input, "\r\n") 这些处理
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("Please input your guess")
var guess int
for {
if _, err := fmt.Scan(&guess); err != nil {
fmt.Println("Invalid input. Please enter an integer value")
continue
}
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
}
}
}
四、个人总结
本节课初步了解go语言的语法,使用go语言进行练习。