这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
Go语言基础语言
1.1 语言特性
- 开放源代码。
- 静态类型和编译型:变量常量声明时指定类型且不可改变。
- 跨平台:支持绝大部分主流的计算机架构和操作系统。
- 自动垃圾回收:允许人工干预。
- 原生的并发编程:拥有自己的并发编程模型,goroutine和channel,特俗关键字go。
- 完善的构建工具。
- 多编程范式:支持面向对象,有接口类型与实现类型的概念,嵌入代替了继承。
- 代码风格强制统一。
- 高效的编程和运行。
- 丰富的标准库。
1.2 安装和设置
主要文件夹的功能:
- api文件夹:依照Go版本顺序的API增量列表文件。
- bin文件夹:存放标准命令文件:包括go、godoc和gofmt。
- blog文件夹:官方博客中的所有文章。
- doc文件夹:存放标准库的HTML格式的程序文档。
- lib文件夹:用于存放一些特殊的库文件。
- misc文件夹:用于存放一些辅助类的说明和工具。
- pkg文件夹:存放安装GO标准库后的所有归档文件。
- src文件夹:存放GO自身、GO标准工具以及标准库的所有源码文件。
- test文件夹:测试和验证GO本身的所有相关文件。
GO环境配置如图所示:
基本语法笔记我已经放在超详细的go语言入门教学栏目中,感兴趣的同道记得三连哦。
超详细的go语言入门教学_newbie __ _的博客-CSDN博客
Go语言实战案例
2.1 猜谜游戏
具体代码我就不放了,免的代码比例太大,我就简单写几个编写这个代码中遇到的问题和涉及的函数
//首先是一个随机数的产生问题,我们要使用一个Seed函数
//理解一下,说白了就是如果想要每次产生不同的随机数,那么我们就要使用不同的seed
rand.Seed(time.Now().Unix())
//然后就是我用的是goland集成开发环境,然后就是我们回车他那个换行符是 \r 不是 \n 所以这两行代码需要稍微修改一下
input, err := reader.ReadString('\r')
input = strings.TrimSuffix(input, "\r")
2.2 在线词典
//与strings.Builder类型恰恰相反,strings.Reader类型是为了高效读取字符串而存在的。后者的高效主要体现在它对字符串的读取机制上,它封装了很多用于在string值上读取内容的最佳实践。
//strings.Reader类型的值,可以让我们很方便地读取一个字符串中的内容。在读取的过程中,Reader值会保存已读取的字节的计数(以下简称已读计数)
strings.NewReader()
reader1 := strings.NewReader("qwertyuiopasdfghjklzxcvbnm")
fmt.Printf("len:%d\n", reader1.Len())
by := make([]byte, 20)
//ReadAt方法算是一个例外。它既不会依据已读计数进行读取,也不会在读取后更新它。
reader1.ReadAt(by, 22)
buf1 := make([]byte, 3)
buf2 := make([]byte, 3)
//读完之后会进行计数
reader1.Read(buf1)
//第二次读取从上一次的计数的位置开始
reader1.Read(buf2)
fmt.Printf("len:%d value:%s\n value:%s\n", reader1.Len(), string(buf1), string(buf2))