扫码订阅《 》或入驻星球,即可阅读文章!

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go友会
  • 城市
  • 校园
Go学院
  • Go小课
  • Go小考
  • Go实战
  • 精品课
Go求职
  • 求职辅导🔥
  • Offer收割社群
  • 企业题库
  • 面试宝典
Go宝典
  • 在线宝典
  • B站精选
  • 推荐图书
  • 每日博文
Go仓库
实验区
  • Go周边
  • Go下载
  • Go月刊
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
author-avatar

GOLANG ROADMAP


首页
Go友会
  • 城市
  • 校园
Go学院
  • Go小课
  • Go小考
  • Go实战
  • 精品课
Go求职
  • 求职辅导🔥
  • Offer收割社群
  • 企业题库
  • 面试宝典
Go宝典
  • 在线宝典
  • B站精选
  • 推荐图书
  • 每日博文
Go仓库
实验区
  • Go周边
  • Go下载
  • Go月刊
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
  • 宝典简介

    • learn-go-with-tests
    • 通过测试学习 Go 语言
  • GO基础

  • 构建应用程序

扫码订阅《 》或入驻星球,即可阅读文章!

通过测试学习 Go 语言


Chris James(本文由GCTT原创编译,Go中文网荣誉推出)

或者通过 Go 语言学习测试驱动开发

Build Status Go Report Card (opens new window)

你可以在 Gitbook 上阅读 (opens new window)

# 目的

  • 通过编写测试探索 Go 语言
  • 上手测试驱动开发。Go 是学习测试驱动开发的好语言,因为它简单易学而且内置测试功能
  • 坚信你将开始在 Go 中编写健壮的、经过良好测试的系统

# 目录

如果目录中的标题没有链接,说明它还没有完成!为什么不一起参与呢?

# Go 基础

  1. 安装 Go - 搭建高效的开发环境。
  2. Hello, world - 声明变量、常量、if/else 语句、switch,编写第一个 Go 程序和第一个测试。子测试和闭包。
  3. 整数 - 进一步研究函数声明的语法,并学习改进代码文档的新方法。
  4. 迭代 - 学习 for 和基准测试。
  5. 数组与切片 - 学习数组、切片、len、可变参数、range 和测试覆盖率。
  6. 结构体,方法和接口 - 学习 struct、方法、接口和表驱动测试。
  7. 指针和错误 - 学习指针和错误处理。
  8. Maps - 学习使用 map 的数据结构存储值.
  9. 依赖注入 - 学习依赖注入、它与使用接口的关系和 io 的入门。
  10. Mocking - 使用 DI 测试现有的未经测试的代码。
  11. 并发 - 学习如何编写并发代码以加快软件运行速度。
  12. Select - 学习如何优雅地处理同步、异步进程。
  13. 反射 - 学习反射机制

基于属性的测试(todo)

# 构建应用

希望你现在已经消化了 Go 基础部分,对大多数 Go 的语言特性有了坚实的基础并且明白测试驱动开发。

下一节将涉及构建应用程序。

每一章都是基于之前程序的迭代,然后根据产品经理的要求扩展应用程序的功能。

为了编写更优秀的代码,我们将引入新的概念,但将要学习的大多数新资料可以从 Go 的标准库中实现。

最终,你应该会对在 Go 中迭代的编写建立在测试基础上的应用程序有深入的理解。

  • HTTP 服务器 - 我们将创建一个应用程序来监听 HTTP 请求并对其作出响应。
  • JSON, routing and embedding - 我们将生成端点(endpoint)返回 JSON 并探索如何分发路由。
  • IO 和排序 - 我们将从磁盘持久化和读取数据,并介绍数据排序。
  • 命令行和项目结构 - 使用 flags 并响应用户在命令行中的输入。

# 参与贡献

  • 这个项目正在进展中,如果你想参与贡献,请务必联系我。
  • 阅读 contributing.md (opens new window) 的指南
  • 有任何疑问请提交 issue

# 背景

我曾经向一些开发团队介绍过 Go 语言。对于怎样使一群对 Go 好奇的人成长为高效的 Go 系统开发者,我已经尝试过很多不同的方法。

# 无效的方法

# 读书

我们尝试过阅读蓝皮书 (opens new window)(The Go Programming Language),每周在练习的同时讨论下一章的内容。

我喜欢这本书,但它需要高度的投入。这本书非常详细地解释了每个概念,这显然是极好的,但也意味着进步是缓慢而稳定的 —— 这不适用于每个人。

我发现虽然有一小部分人会阅读第 x 章并做练习,但很多人不会这么做。

# 解决一些问题

Kata (opens new window)^注1 很有趣,但是他们学习语言的范围通常是有限的;你不太可能用 Go 例程来解决 kata 问题。

另一个问题是当你们有不同程度的热情时,有些人只是比其他人学得更多,当他们演示他们所做的事情时,最终导致其他人困惑于他们不熟悉的特性。

这最终会使学习变得非常 凌乱无序。

# 有效的方法

到目前为止,最有效的方法是通过 go by example (opens new window) 来慢慢地介绍语言的基本,通过例子探索学习,并组成小组讨论它们。这是一种比「为完成作业阅读第 x 章」更具互动性的方法。

随着时间的推移,团队获得了坚实的语法基础,这样我们就可以开始构建系统了。

这对我来说就像是在学习吉他时练习音阶。

不管你认为自己多有艺术感,你不可能在不了解基本原理和练习技巧的情况下写出好音乐。

# 对我有效的方法

当学习一种新的编程语言时,我通常开始会纠结在 REPL(Read-Eval-Print-Loop)中,但最终我需要更多的结构。

我喜欢探究概念,然后通过测试来巩固概念。测试验证我编写的代码是正确的,并记录我已经学到的特性。

以我的团队学习经历和我自己的个人风格,我将尝试创造一些东西,希望证明对其他团队也有用。通过编写小测试来学习基础知识,这样你就可以掌握现有的软件设计技巧并交付一些优秀的系统。

# 适用人群

  • 有兴趣学习 Go 语言
  • 已经对 Go 有一些了解,但是想要探索更多测试的内容

# 准备工作

  • 一台电脑
  • 安装 Go (opens new window)
  • 一个文本编辑器
  • 一些编程的经历,理解 if、变量、函数等的概念
  • 舒适的使用终端

# 反馈

  • 提交 issues 或者 tweet me @quii (opens new window)

MIT license


作者:Chris James (opens new window) 译者:Donng (opens new window) 校对:pityonline (opens new window)

本文由 GCTT (opens new window) 原创编译,Go 中文网 (opens new window) 荣誉推出

  • 目的
  • 目录
  • Go 基础
  • 构建应用
  • 参与贡献
  • 背景
  • 无效的方法
  • 有效的方法
  • 对我有效的方法
  • 适用人群
  • 准备工作
  • 反馈