Go实操 | 青训营

80 阅读2分钟

实战案例一:猜谜游戏

  1. 使用**math/rand/**库:rand.Seed(time.Now().UnixNano())实现一个纳秒级更新的随机种子库;然后使用rand.Intn()函数实现随机数的生成。

rand.Intn(Number)函数是在一个左开右闭的区间内生成,rand.Int(Number)函数在一个全闭范围内生成。

  1. 使用bufio库:reader=NewReader(os.Stdin)创建一个新的对象,用于从标准输入端读入用户数据,即为reader;使用readString函数将输入放入变量Input中,碰到换行符就停止读入。如果存在错误信息(err不等于nil,相当于none),就打印错误提示并完成程序。
    最后,在Input变量中只用strings.trim函数去除换行符和回车符,并且将输入字符串转化为整型变量guess。

  2. 加上判断,完成一次程序。需要多次输入,我们需要for循环。

该程序所用到的go库为:bufio,fmt,math/rand,os(os.Stdin),strconv,strings,time

实战案例二:在线词典

http通信包括:请求方法-请求头-请求体-响应-响应状态码-读取响应体-错误处理

  1. 首先在需要连接的网页中获取cURL并编写http请求代码如下(使用curlconverter.com)进行代码生成.
  2. 由于请求体需要的数据不局限于以上代码,则需要使用json序列化来实现请求体的变化。
  3. 通过oktools.net生成结构体代码解析response
  4. 输出相应的音标,解释等。将在线词典功能封装为一个函数;在主函数中读取命令行中的参数,载入word,运行程序。

我真的要疯了.jpg之实战案例三:socks5代理,完全听不懂,大哥。

Go语言进阶与依赖管理

  1. 并发(多线程单核√)与并行(多线程多核)
    1.1 Goroutine:协程(√)/线程
    1.2 CSP:通过通信实现并发处理,而不共享数据
    1.3 Channel
    1.4 并发安全 Lock
    1.5 waitgroup

  2. 依赖管理 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语言工程实践之测试

  1. 单元测试
  • _test.go结尾
  • func TestXxx(*testing.T)
  • 初始化逻辑放到TestMain中:测试前准备工作;测试后的收尾工作
  • testify/assert包可实现结果的equal/notequal
  • 代码覆盖率
  • 依赖
  • mock
  1. 基准测试