Skip to content

wangdengwu/LearnGoWithTdd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

测试驱动学Go

Hello World

需求

  1. 编写一个函数,返回字符串"hello world"
  2. 重构函数,输入name,返回"hello name"

总结

  1. 函数
    • 函数的定义
    • 函数的入参和返回值
    • 私有和公共修饰符
  2. 变量
    • 变量定义和赋值
    • 常量
  3. if

简单计算器calculator

需求

  1. 编写基于整数的加减乘除运算函数,为了节省时间只实现Add和Div即可
  2. 重构Add使支持多个整数相加

总结

  1. Add
    • 数字溢出
  2. Div
    • +Inf和-Inf
    • NaN!=NaN
  3. 重构Add
    • fori and forr
    • slice和array是不同的类型,[3]int和[2]int也是不同类型

结构体,方法和接口

需求

  1. 编写求长方形(rectangle)面积(Area)的函数
  2. 编写求圆形Circle:radius面积的函数
  3. 定义结构体来存储数据
  4. 定义结构体的方法
  5. 抽象接口Shape方法Area

总结

  1. 如何定义和初始化结构体
    • 字面量初始化和new
  2. 如何定义方法
  3. 如何定义接口

指针和错误

需求

  1. 实现一个简单的钱包(Wallet)管理功能
    • 可以给钱包存钱Deposit
    • 可以从钱包取钱Withdraw
    • 如果取钱时,资金Balance不够,则报错
  2. 实现年龄管理功能
    • 对每个人的年龄+1
    • 以slice的方式传递参数
    • 以map的方式传递参数

总结

  1. 值传递
  2. 如果需要重用结构体,则可以传递指针,避免copy导致的性能和数据不一致
  3. 支持多返回值,方法一般最后一个参数为error
  4. 对map的value修改需要重新赋值

------------高级特性-------------

微服务调用

需求

  1. 同步调用服务获取结果
  2. 使用异步方式调用
  3. 基准测试同步和异步的差异

总结

  1. go协程
  2. chan管道数据传输
  3. 同步控制
  4. 自带基准测试`go test -bench

计数

需求

  1. 实现自增+1功能
  2. 调用1000次自增计数
  3. 使用并发调用自增计数,使用锁确保正确性
  4. 使用基准测试,测试顺序自增和并发有锁自增结果

总结

  1. go协程
  2. 基准测试

泛型

需求

  1. 简单计算器支持浮点运算

总结

  1. 泛型可以减少反射的使用

反射

需求

  1. 定义结构体
  2. 获取结构体对应的类型和属性名称

总结

  1. go特有的tag

作业

json序列化和反序列化

实现结构体对象的json序列化和反序列化

查看go的json.Marshal()和json.Unmarshal()是如何实现的

About

learn go with tdd

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages