实战案例一:猜谜游戏
- 使用**math/rand/**库:
rand.Seed(time.Now().UnixNano())实现一个纳秒级更新的随机种子库;然后使用rand.Intn()函数实现随机数的生成。
rand.Intn(Number)函数是在一个左开右闭的区间内生成,rand.Int(Number)函数在一个全闭范围内生成。
-
使用bufio库:
reader=NewReader(os.Stdin)创建一个新的对象,用于从标准输入端读入用户数据,即为reader;使用readString函数将输入放入变量Input中,碰到换行符就停止读入。如果存在错误信息(err不等于nil,相当于none),就打印错误提示并完成程序。
最后,在Input变量中只用strings.trim函数去除换行符和回车符,并且将输入字符串转化为整型变量guess。 -
加上判断,完成一次程序。需要多次输入,我们需要for循环。
该程序所用到的go库为:bufio,fmt,math/rand,os(os.Stdin),strconv,strings,time
实战案例二:在线词典
http通信包括:请求方法-请求头-请求体-响应-响应状态码-读取响应体-错误处理
- 首先在需要连接的网页中获取cURL并编写http请求代码如下(使用curlconverter.com)进行代码生成.
- 由于请求体需要的数据不局限于以上代码,则需要使用json序列化来实现请求体的变化。
- 通过oktools.net生成结构体代码解析response
- 输出相应的音标,解释等。将在线词典功能封装为一个函数;在主函数中读取命令行中的参数,载入word,运行程序。
我真的要疯了.jpg之实战案例三:socks5代理,完全听不懂,大哥。
Go语言进阶与依赖管理
-
并发(多线程单核√)与并行(多线程多核)
1.1 Goroutine:协程(√)/线程
1.2 CSP:通过通信实现并发处理,而不共享数据
1.3 Channel
1.4 并发安全 Lock
1.5 waitgroup -
依赖管理 2.1 依赖管理演进:GOPATH-Go Vender-Go Module 2.2 依赖管理三要素
2.2.1 配置文件,描述依赖(go.mod)
2.2.1.1 依赖管理基本单元,原生库,单元依赖
2.2.1.2 version:语义化/commit伪版本
2.2.1.3 indirect间接依赖
2.2.1.4 incompatible
2.2.2 依赖分发-Proxy 2.2.3 本地工具 go mod:init,download,tidy
Go语言工程实践之测试
- 单元测试
- _test.go结尾
- func TestXxx(*testing.T)
- 初始化逻辑放到TestMain中:测试前准备工作;测试后的收尾工作
- testify/assert包可实现结果的equal/notequal
- 代码覆盖率
- 依赖
- mock
- 基准测试