【day1】Go 语言基础 - 基础语法 | 青训营笔记

64 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第1天
要点
1.Go 语言学习背景介绍。
2.Go 语言基础语言详细讲解。 a.开发环境 b.基础语法 c.标准库
3.Go 语言实战。 a.项目一:猜谜游戏 b.项目二:命令行词典 c.项目三:SOCKS5 代理

课程1 - 走进 Go 语言基础语言

Go语言特性:
1.高性能、高并发
2.语法简单
3.丰富的标准库
4.完善的工具链【代码填充、代码格式化等】
5.静态链接【不需要动态链接】
6.快速编译
7.跨平台【可以交叉编译】
8.垃圾回收

注意事项:
1.len(x)函数,当x为中文字符串时,返回的结果不一定为x中的字数【一个中文可能长度大于1】
2.结构体中,字段名首字母大写表示是public字段

课程2 - Go 语言的实战案例

主要内容:

1.猜字谜游戏

注意事项:
1.rand.Intn(x)函数会每次都生成同一个值,原因是随机数种子一样,导致随机数一样;解决方法:每次程序运行时使用时间戳初始化随机数种子
如下代码: rand.Seed(time.Now().UnixNano())

2.注意读入数字的错误处理
如下代码:

input, err := reader.ReadString('\n')
if err != nil {
   fmt.Println("读取标准输入出错了", err)
   continue
}
input = strings.TrimSuffix(input, "\n")
guess, err := strconv.Atoi(input)
if err != nil {
   fmt.Println("数字解析出错!", err)
   continue
}
2.在线词典

注意事项:
1.url构造太复杂时可以使用curl格式的url;再前往www.curlconverter.com转化为go代码
2.使用www.oktools.net/json2go对json进行转化,以快速生成结构体以解析response 3.注意json.Unmarshal(bodyText, &dictResponse)时,需要传入结构体的指针!

3.socks5代理

注意事项:
1.关键字go:类似于子线程
2.使用Context.WithCancel创建context,等context执行完成/失败时再关闭连接。防止一开始执行就直接关闭连接了【类似于线程等待】